코딩테스트
1249. [S/W 문제해결 응용] 4일차 - 보급로
yolang
2024. 11. 17. 12:42
728x90

기본적인 다익스트라, BFS 문제였다.
생각할 점은
- 누적값을 저장할 공간 만들기
- 값이 더 작을 경우에만 큐에 넣기
- 칸 안에 있는 지 검사하기 - valid 함
- python 에서 false 가 아니라 False 임 - 대문자..
- 최대값 쓰고 싶으면 float('inf') 사용하기
def valid(n_x, n_y):
if n_x < 0 or n_y < 0:
return False
if n_x >= N or n_y >= N:
return False
return True
def bfs(start):
q = [start]
min_board = [[float('inf')] * N for _ in range(N)]
min_board[start[0]][start[1]] = 0
dx, dy = [1, 0, -1, 0], [0, 1, 0, -1]
while q:
curr = q.pop(0)
for i in range(4):
new_x = curr[0] + dx[i]
new_y = curr[1] + dy[i]
if valid(new_x, new_y):
new_val = min_board[curr[0]][curr[1]] + board[new_x][new_y]
if new_val < min_board[new_x][new_y]:
min_board[new_x][new_y] = new_val
q.append((new_x, new_y))
return min_board[N-1][N-1]
T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
N = int(input())
board = []
for i in range(N):
board.append([int(x) for x in input()])
answer = bfs((0, 0))
print(f'#{test_case} {answer}')728x90