말은 사다리게임이고 실상은 사다리 오르기 게임. 좌우 선탐색BFS로 풀었슴니다.
import sys
sys.stdin = open('input.txt')
from collections import deque
def find_start(ladder):
for i in range(100):
for j in range(100):
if ladder[i][j] == 2:
return i, j
# 사다리게임을 합니다.
def do_ladder_game(ladder):
visited = [[False for _ in range(100)] for _ in range(100)]
init_x, init_y = find_start(ladder) # 도착지를 찾습니다.
dx = [0, 0, -1]
dy = [1, -1, 0]
queue = deque()
queue.append([init_x, init_y]) # 도착지부터 역사다리 게임을 합니다.
visited[init_x][init_y] = True
while queue:
x, y = queue.popleft()
if not x:
return y
for i in range(3): # 좌우를 먼저 살피고 못가면 위로갑니다.
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < 100 and 0 <= ny < 100 and not visited[nx][ny] and ladder[nx][ny] == 1:
visited[nx][ny] = True
queue.append([nx, ny])
break # 갔으면 다른 선택지로 분기가 나뉘는 것을 막습니다.
for _ in range(1, 11):
test = int(input())
ladder = [list(map(int, input().split())) for _ in range(100)]
print(f'#{test} {do_ladder_game(ladder)}')
'practivceAlgorithm > swexpertacademy' 카테고리의 다른 글
[SWEA][Python] 4843 특별한 정렬 (0) | 2021.08.12 |
---|---|
[SWEA][Python] 4836 색칠하기 (0) | 2021.08.12 |
[SWEA][Python] L4839 이진탐색 (0) | 2021.08.12 |
[SWEA][Python] 1954 달팽이숫자 (0) | 2021.08.11 |
[SWEA] 1209 배열의 최댓값 구하기 (0) | 2021.08.11 |