[BAKJOON] #1932. 정수 삼각형 (다이나믹 프로그래밍)
BAKJOON #1932. 정수 삼각형 문제를 파헤쳐보자 :)
BAKJOON #2178. 미로 문제를 파헤쳐보자 :)
1 | 0 | 1 | 1 | 1 | 1 |
1 | 0 | 1 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 0 | 1 | 1 |
from collections import deque # 입력 n, m = map(int, input().split()) # 미로 크기 입력 maze = [list(map(int, input().strip())) for _ in range(n)] # 2차원 리스트로 만듦 # 이동 방향 (상, 하, 좌, 우) dx = [-1, 1, 0, 0] # 행: 아래로 갈수록 증가 (상/하만 생각) dy = [0, 0, -1, 1] # 열: 오른쪽으로 갈수록 증가 (좌/우만 생각) # BFS 함수 def bfs(x, y): # 큐를 생성하고 시작점 (0, 0)을 큐 삽입 queue = deque() queue.append((x, y)) while queue: # 큐가 빌 때까지 반복 x, y = queue.popleft() for i in range(4): # 4방향 하나씩 확인하며 다음 위치 계산 nx = x + dx[i] ny = y + dy[i] # 범위 밖은 무시 if nx < 0 or ny < 0 or nx >= n or ny >= m: # 도착점은 n-1, m-1 continue # 벽이거나 이미 방문한 곳은 무시 if maze[nx][ny] != 1: # 1은 이동 가능한 칸 continue # 이동할 수 있는 칸이라면 거리 기록하고 큐에 추가 maze[nx][ny] = maze[x][y] + 1 queue.append((nx, ny)) # 도착 지점의 값이 최소 이동 칸 수 (시작 칸, 도착 칸 포함) return maze[n - 1][m - 1] # 출력 print(bfs(0, 0))