점프를 아래, 오른쪽으로만 할 수 있다고 해서 방문표시가 필요 없다고 생각했다.
현재 밟고 있는 칸에 쓰여진 숫자가 0이라면, 0만큼 이동하게 되어 제자리를 무한반복하게 된다.
따라서 방문 체크 리스트를 만들던가, 현재 밟고 있는 칸의 값이 0이 아니다를 조건으로 설정해 주어야 한다.
import sys
from collections import deque
input=sys.stdin.readline
n=int(input())
graph=[list(map(int,input().split())) for _ in range(n)]
dx=[1,0]
dy=[0,1]
def bfs(x,y):
q=deque()
q.append((x,y))
while q:
x,y=q.popleft()
if graph[x][y]==-1: # 끝에 도착하면
return 'HaruHaru'
for i in range(2): # 현재 밟고 있는 숫자만큼 아래 또는 오른쪽으로 이동
nx=x+dx[i]*graph[x][y]
ny=y+dy[i]*graph[x][y]
if 0<=nx<n and 0<=ny<n and graph[x][y]!=0: # 구역을 벗어나지 않고 밟고 있는 칸이 0이 아니면
q.append((nx,ny))
return 'Hing'
print(bfs(0,0)) # 출발은 무조건 왼쪽 제일 위
틀린답
import sys
from collections import deque
input=sys.stdin.readline
n=int(input())
graph=[list(map(int,input().split())) for _ in range(n)]
dx=[1,0]
dy=[0,1]
def bfs(x,y):
q=deque()
q.append((x,y))
while q:
x,y=q.popleft()
if graph[x][y]==-1: # 끝에 도착하면
return 'HaruHaru'
for i in range(2): # 현재 밟고 있는 숫자만큼 아래 또는 오른쪽으로 이동
nx=x+dx[i]*graph[x][y]
ny=y+dy[i]*graph[x][y]
if 0<=nx<n and 0<=ny<n:
q.append((nx,ny))
return 'Hing'
print(bfs(0,0)) # 출발은 무조건 왼쪽 제일 위
3
1 1 0
1 0 1
0 1 -1
틀린답 입력에 위 값을 넣어보면 (1,1) 위치에서 못 벗어나는 것을 확인할 수 있었다.
'알고리즘' 카테고리의 다른 글
[백준 알고리즘] 1699번 제곱합. 파이썬(python) (0) | 2022.07.17 |
---|---|
[백준 알고리즘] 17219번 비밀번호 찾기. 파이썬(python) (0) | 2022.07.14 |
[백준 알고리즘] 11723번 집합. 파이썬(python) (0) | 2022.07.14 |
[백준 알고리즘] 10815번 숫자 카드. 파이썬(python) (0) | 2022.07.14 |
[백준 알고리즘] 1436번 영화감독 숌. 파이썬(python) (0) | 2022.07.14 |