알고리즘

[백준, 파이썬, 16174번] 점프왕 쩰리 (Large)

hminor 2023. 9. 12. 10:57
반응형

 

풀이

 

  • 델타 탐색 중 아래와 오른쪽으로만 탐색하도록 하며,
  • mtx의 di, dy의 값에 현재 위치 값을 더한 값이 범위 내에 있는지 확인
  • 이후 가장 아래의 가장 오른쪽인 도착 지점에 위치했을 경우
  • flag를 True로 변경 후 q에 남아있어도 while문 탈출하도록 하기
  • 또한 visit를 활용해서 같은 위치를 재방문하지 않도록 해서 해결

 

import sys
from collections import deque

input = sys.stdin.readline
n = int(input())
mtx = [list(map(int,input().rstrip('\n').split())) for _ in range(n)]
visit = [[0]*n for _ in range(n)]
visit[0][0] = 1
q = deque([[0,0]])
flag = False

while q:
    i,j = q.popleft()
    val = mtx[i][j]
    for di,dy in [[i+val,j],[i,j+val]]:
        if 0<=di<n and 0<=dy<n and not visit[di][dy]:
            if (di,dy) == (n-1,n-1):
                flag = True
                break
            visit[di][dy] = 1
            q.append([di,dy])
    if flag: break

print('HaruHaru') if flag else print('Hing')