문제
- ‘쩰리’는 점프하는 것을 좋아하는 젤리다.
- 단순히 점프하는 것에 지루함을 느낀 ‘쩰리’는 새로운 점프 게임을 해보고 싶어 한다.
- 새로운 점프 게임의 조건은 다음과 같다.
- ‘쩰리’는 가로와 세로의 칸 수가 같은 정사각형의 구역 내부에서만 움직일 수 있다. ‘쩰리’가 정사각형 구역의 외부로 나가는 경우엔 바닥으로 떨어져 즉시 게임에서 패배하게 된다.
- ‘쩰리’의 출발점은 항상 정사각형의 가장 왼쪽, 가장 위의 칸이다. 다른 출발점에서는 출발하지 않는다.
- ‘쩰리’가 이동 가능한 방향은 오른쪽과 아래 뿐이다. 위쪽과 왼쪽으로는 이동할 수 없다.
- ‘쩰리’가 가장 오른쪽, 가장 아래 칸에 도달하는 순간, 그 즉시 ‘쩰리’의 승리로 게임은 종료된다.
- ‘쩰리’가 한 번에 이동할 수 있는 칸의 수는, 현재 밟고 있는 칸에 쓰여 있는 수 만큼이다. 칸에 쓰여 있는 수 초과나 그 미만으로 이동할 수 없다.
- 새로운 게임이 맘에 든 ‘쩰리’는, 계속 게임을 진행해 마침내 최종 단계에 도달했다.
- 하지만, 게임을 진행하는 구역이 너무 넓어져버린 나머지, 이 게임에서 이길 수 있는지 없는지 가늠할 수 없어졌다.
- ‘쩰리’는 유능한 프로그래머인 당신에게 주어진 구역에서 승리할 수 있는 지 알아봐 달라고 부탁했다.
- ‘쩰리’를 도와 주어진 게임 구역에서 끝 점(오른쪽 맨 아래 칸)까지 도달할 수 있는지를 알아보자!
- 게임 구역의 크기 N (2 ≤ N ≤ 3)이 주어진다.
- 게임판의 구역(맵)이 주어진다.
- 게임판의 승리 지점(오른쪽 맨 아래 칸)에는 -1이 쓰여있고, 나머지 칸에는 0 이상 100 이하의 정수가 쓰여있다.
- ‘쩰리’가 끝 점에 도달할 수 있으면 “HaruHaru”(인용부호 없이), 도달할 수 없으면 “Hing” (인용부호 없이)을 한 줄에 출력합니다.
알고리즘
- bfs 탐색을 통해 문제를 수행한다.
- 아래, 오른쪽으로만 이동할 수 있음으로 두 방향을 반복하여 이동하여 탐색한다.
- 현재 위치가 승리 지점이면 탐색을 멈추고 성공 메시지를 출력한다.
- 모든 노드를 확인 후 성공 지점으로 도착하지 못하면 실패 메시지를 출력한다.
코드
import sys
from collections import deque
# bfs 탐색
def bfs():
queue = deque()
queue.append([0, 0])
visited[0][0] = True
# 큐에 탐색해야 하는 노드 없을 때까지 실행
while queue:
a, b = queue.popleft()
check = graph[a][b]
# 현재 위치가 승리 지점이면 멈춰 성공 메시지 출력
if check == -1:
print("HaruHaru")
return
# 우, 하를 이동하여 비교
for dx, dy in (1, 0), (0, 1):
x = a + dx * check
y = b + dy * check
# 정사각형 구역 내부이고 한번도 방문하지 않았으면 노드를 큐에 넣고 방문 처리한다.
if 0 <= x < n and 0 <= y < n and visited[x][y] == False:
queue.append((x, y))
visited[x][y] = True
# 모든 상황에서 승리 지점을 가지 못하면 실패 메시지 출력
print("Hing")
n = int(sys.stdin.readline())
# 2차원 그래프로 표현
graph = [list(map(int, sys.stdin.readline().split())) for _ in range(n)]
# 탐색 여부
visited = [[False] * n for _ in range(n)]
# 탐색
bfs()
github
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 16956번(파이썬): 늑대와 양 (0) | 2021.07.27 |
---|---|
[baekjoon] 백준 9372번(파이썬): 상근이의 여행 (0) | 2021.07.26 |
[baekjoon] 백준 1388번(파이썬): 바닥 장식 (0) | 2021.07.23 |
[baekjoon] 백준 11403번(파이썬): 경로 찾기 (0) | 2021.07.22 |
[baekjoon] 백준 4963번(파이썬): 섬의 개수 (0) | 2021.07.21 |