백준_16173_점프왕 쩰리

임정민·2023년 6월 11일
1

알고리즘 문제풀이

목록 보기
60/173
post-thumbnail

백준 너비 우선 탐색 문제풀이 입니다.

문제

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() 함수 사용한 풀이도 볼 수 있었습니다.🦌🦌🦌

감사합니다.

profile
https://github.com/min731

0개의 댓글