본문 바로가기
백준 풀이

[백준/BOJ] - 16174번 python 풀이 - dfs

by 반오십 코린이 2023. 4. 3.
728x90

https://www.acmicpc.net/problem/16174

 

16174번: 점프왕 쩰리 (Large)

쩰리는 맨 왼쪽 위의 칸에서 출발해 (행, 열)로 나타낸 좌표계로,  (1, 1) -> (2, 1) -> (3, 1) -> (3, 3)으로 이동해 게임에서 승리할 수 있다.

www.acmicpc.net



문제의 핵심을 파악하는 것이 중요하다.

출발점은 정사각형의 가장 왼쪽, 가장 위의 칸이라는 점

이동 가능한 방향은 오른쪽과 아래 뿐이라는 점

가장 오른쪽 아래에 도착하면 승리한다는 점

이동할 수 있는 칸은 배열에 적혀있는 칸의 크기라는 점

 

dfs 함수 재귀적 호출을 하며 도착지에 도착했을 경우 "HaruHaru" 출력

실패했을 경우 "Hing" 출력


import sys
sys.setrecursionlimit(1000000)

n = int(input())
arr = []
ok = [[False for _ in range(n)] for _ in range(n)]
for _ in range(n):
    arr.append(list(map(int,input().split())))

def dfs(x,y):
    if x==n-1 and y==n-1: #우측맨아래 좌표
        print("HaruHaru")
        exit(0)
    ok[x][y] = True #방문처리
    dx, dy = (0, arr[x][y]), (arr[x][y], 0) #우측, 아래로만 이동 가능
    for i in range(2):
        rx = x + dx[i]
        ry = y + dy[i]
        if (0<=rx<n) and (0<=ry<n): #넘어가지 않게 범위 설정
            if not ok[rx][ry]: #방문 안했다면 
                dfs(rx,ry) # 재귀 호출


dfs(0,0)
print("Hing") #dfs 함수에서 exit 안했다면 패배이므로 "Hing" 출력
728x90