# 6593 상범 빌딩 from collections import deque def printresult(flag,sec): if flag: return f'Escaped in {sec} minute(s).' else: return 'Trapped!' while True: L,R,C = map(int,input().split()) if L+R+C == 0: break building = [] dx = [-1,1,0,0,0,0] dy = [0,0,-1,1,0,0] dz = [0,0,0,0,-1,1] startpoint = [] endpoint = [] for ind in range(L): temp = [] for x in range(R): input_list = list(input()) for y,val in enumerate(input_list): if val == 'S': startpoint = [x,y,ind] elif val == 'E': endpoint = (x,y,ind) temp.append(input_list) building.append(temp) input() # 층,행,열 stack = deque() stack.append(startpoint) building[startpoint[2]][startpoint[0]][startpoint[1]] = '#' minutes = 0 flag = False while stack: new_stack = [] minutes += 1 for x,y,z in stack: for i in range(6): nx = x + dx[i] ny = y + dy[i] nz = z + dz[i] if 0<=nx<R and 0<=ny<C and 0<=nz<L: if building[nz][nx][ny] != '#': if (nx,ny,nz) == endpoint: flag = True break else: building[nz][nx][ny] = '#' new_stack.append((nx,ny,nz)) if flag: print(printresult(flag,minutes)) break stack = new_stack[:] if not flag: print(printresult(flag,minutes))
BFS 관련 문제이다. 문제를 제대로 안 읽어서 input값을 제대로 안 받았더니 많이 틀렸던 문제이다.
일반적인 BFS를 3차원으로 바뀐것과 동일하고, range를 많이 쓰면 메모리 초과가 날 수 있으니 조심해서 풀면 되는 문제이다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 5582 공통 부분 문자열 (0) | 2021.02.18 |
---|---|
[BOJ/백준] 3020 개똥벌레 (0) | 2021.02.18 |
[BOJ/백준] 11054 가장 긴 바이토닉 부분 수열 (0) | 2021.02.17 |
[BOJ/백준] 2631 줄세우기 (0) | 2021.02.16 |
[BOJ/백준] 2873 롤러코스터 (0) | 2021.02.16 |