코딩테스트
1226. [S/W 문제해결 기본] 7일차 - 미로1
yolang
2024. 11. 17. 12:50
728x90
dfs 문제로 이번에는 재귀가 아니라 stack을 이용해 풀어봤다.
def valid(r, c):
condition = board[r][c] == 0 or board[r][c] == 3
return 0 <= r < total and 0 <= c < total and (r, c) not in visited and condition
def dfs(start):
stack = [start]
move = [(1, 0), (-1, 0), (0, 1), (0, -1)]
while stack:
curr = stack.pop()
row, column = curr[0], curr[1]
if board[row][column] == 3:
return 1
for i in range(4):
n_r, n_c = row + move[i][0], column + move[i][1]
if valid(n_r, n_c):
stack.append((n_r, n_c))
visited.add((n_r, n_c))
return 0
T = 10
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
N = int(input())
board = []
total = 16
visited = set()
for i in range(total):
board.append([int(x) for x in input()])
start = (1, 1)
answer = dfs(start)
print(f'#{test_case} {answer}')
728x90