Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- spring
- 스프링 핵심 원리 - 기본편
- 자바 ORM 표준 JPA 프로그래밍 7장
- 코틀린
- Kotlin
- 객체 지향 설계와 스프링
- 13460 구슬탈출 2
- Kotlin in action 3장
- 7장 고급매핑
- 백준 20055 컨베이어 벨트 위의 로봇
- Python
- 코틸린인액션
- 백준 13460 Python
- Kotlin in action 6장
- 컨베이어 벨트 위의 로봇 Python
- 20055 컨베이어 벨트 위의 로봇
- 스프링 컨테이너와 스프링 빈
- Kotlin in action 5장
- 기능개발 python
- 백준
- KotlinInAction
- 고급매핑
- 스프링 핵심 원리
- Kotlin in action 10장
- 코틀린인액션
- kotlin in action 정리
- Kotlin In Action
- 싱글톤 컨테이너
- 20055
- 스프링 핵심 원리 이해
Archives
- Today
- Total
기록하는 습관
[백준] 2178 미로 탐색 (Python, BFS) 본문
문제
코드
from collections import deque
n, m = map(int, input().split())
graph = []
for _ in range(n):
graph.append(list(map(int, input())))
dx = [-1, 1, 0, 0] # 상, 하, 좌, 우
dy = [0, 0, -1, 1]
def bfs(x,y):
q = deque()
q.append((x,y))
while q:
x,y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or ny < 0 or nx >= n or ny >= m: # 가장자리 벽 pass
continue
if graph[nx][ny] == 0: # 0은 이동할 수 없기 때문에 pass
continue
if graph[nx][ny] == 1:
graph[nx][ny] = graph[x][y] + 1
q.append((nx,ny))
return graph[n-1][m-1]
print(bfs(0,0))
풀이
- 방향벡터 dx, dy를 잡아준다.
- bfs 알고리즘을 이용.
- 시작: queue에 (0,0)을 담아주기
- queue가 빌 때까지 계속 pop을 해주며 조건에 맞으면 queue에 다시 append.
- 조건1: 가장자리(첫 번째 if문)는 continue
- 조건2: 0인 칸(두 번째 if문)은 continue
- 조건3: 1인 칸(세 번째 if문)이면 graph[x][y] + 1 해준 값을 넣기. (칸을 이동할 때마다 1씩 증가하므로)
- 다 돌고 나면 graph[n-1][m-1]을 return하기
'알고리즘 > [문제풀이] 백준' 카테고리의 다른 글
[백준] 13460 구슬 탈출 2 (0) | 2021.06.13 |
---|---|
[백준] 16932 모양 만들기 (0) | 2021.06.12 |
[백준] 1068 트리 (0) | 2021.06.02 |
[백준] 9934 완전 이진 트리 (0) | 2021.05.30 |
[백준] 14425 문자열 집합 (0) | 2021.05.23 |
Comments