백준 너비 우선 탐색 문제풀이 입니다.
문제
https://www.acmicpc.net/problem/16173
[나의 풀이]
N = int(input())
graph = [[] for _ in range(N)]
# print(graph)
for i in range(N):
line = list(map(int, input().split()))
graph[i] = line
vistied = [[False] * N for _ in range(N)]
# print(vistied)
from collections import deque
queue = deque([[0, 0]])
# print(queue)
while queue:
# print("큐 : ", queue)
v = queue.popleft()
# print("현재 위치 : ", v[0], v[1])
if graph[v[0]][v[1]] == -1:
print("HaruHaru")
break
add = graph[v[0]][v[1]]
# print("add : ", add)
if not vistied[v[0]][v[1]]:
# 하
if v[1] + add <= N - 1:
queue.append([v[0], v[1] + add])
# 우
if v[0] + add <= N - 1:
queue.append([v[0] + add, v[1]])
vistied[v[0]][v[1]] = True
if len(queue) == 0:
print("Hing")
break
너비 우선 탐색을 통해 주어진 맵의 -1인 도착지점을 찾는 문제입니다. BFS 구조를 통해 탐색하여 구현하였습니다.🐕🐕🐕
[다른 사람의 풀이]
from collections import deque
N = int(input())
board = [list(map(int,input().split())) for _ in range(N)]
queue = deque()
queue.append([0,0])
while queue:
x,y = queue.popleft()
if board[x][y] == 0:
continue
if x == N-1 and y == N-1:
print("HaruHaru")
exit()
if 0 <= x+board[x][y] < N and 0 <= y < N:
queue.append([x+board[x][y],y])
if 0 <= x < N and 0 <= y+board[x][y] < N:
queue.append([x,y+board[x][y]])
print("Hing")
저의 풀이와 같은 방식이지만 도착지점에 도달하였을 때 실행을 종료시키는 exit() 함수 사용한 풀이도 볼 수 있었습니다.🦌🦌🦌
감사합니다.