알고리즘GOGO

[BOJ] 16173 점프왕 쩰리

idleday 2022. 11. 14. 23:53

 

# 16173 점프왕 쩰리
# BFS
# 쩰리 : 맨 왼쪽 위의 칸에서 출발해 (행, 열)로 나타낸 좌표계

from collections import deque
import sys
input = sys.stdin.readline

N = int(input())    # 게임구역의 크기
graph = [list(map(int, input().split()))for _ in range(N)]  # 게임판 구역을 입력받는 2차원 리스트
visited = [[False]*3 for _ in range(N)]  # 방문여부 저장용 2차원 리스트

# 방향 벡터 설정
dx = [1, 0]     # 오른쪽만 가능
dy = [0, 1]     # 아래만 가능

# BFS 
def bfs(x, y):
    q = deque([(x, y)])

    while q:
        x, y = q.popleft()
        # 쩰리가 현재 밟고 있는 칸의 숫자 인출
        step = graph[x][y]

        # 끝점이 -1이므로 -1로 도달하면 성공!
        # x좌표와 y좌표가 N-1에 도달한다면 오른쪽 가장 아래로 이동 가능
        if graph[x][y] == -1:
            return True
        for move in range(2):
            # 쩰리가 현재 밟은 숫자를 인출하고 이동수에 곱해서 이동
            nx = x+dx[move]*step
            ny = y+dy[move]*step

            # 주어진 범위를 벗어나는 경우 무시
            # x,y의 범위가 0,0보다 작아지거나, 주어진 matrix 크기를 초과하는 경우
            if nx < 0 or nx >= N or ny < 0 or ny >= N:
                continue

            # 방문하지 않았을 경우
            if not visited[nx][ny]:
                # 방문 처리
                visited[nx][ny] = True
                # 아직 우리가 찾는 조건(graph[x][y] == -1)이 아니므로 q에 담아주고 다시 반복
                q.append([nx, ny])


# 결과 출력
if bfs(0, 0):   # (0,0)에서 출발
    print('HaruHaru')
else:
    print('Hing')

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

 

16173번: 점프왕 쩰리 (Small)

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

www.acmicpc.net

 

 

'알고리즘GOGO' 카테고리의 다른 글

[BOJ/백준] 1436 영화감독 숌 (Python)  (0) 2023.07.10
[BOJ/백준] 10814 나이순 정렬 (Python)  (0) 2023.07.10
Hello World!  (0) 2022.12.11
[BOJ/백준] 9012번: 괄호  (0) 2022.09.05
렛츠고  (0) 2022.08.01