-
BOJ 백준 파이썬 16954 움직이는 미로 탈출백준 2022. 6. 29. 05:18
풀이법은 2가지가 있다.
1)첫 번째는 8x8배열이니까 어차피 8초가 지나면 모든 벽이 사라지니까
0초~8초(8초 이후는 무의미하니 8초로 고정) 일때의 삼차원 배열을 선언해서 풀이하는 방법
하지만, 이 방법은 어렵고 헷갈려서 시험장에서 자연스럽게 떠올리기 힘들 것 같다는 생각에
내 스타일은 아니라고 판단하였다.
t초후의 벽은 board[nx-t][ny]라는 발상도 멋지지만 막상 떠올릴 수 있을까? 생각
bfs 조건도 낯설었다.
1234567891011121314151617181920212223242526272829303132333435363738394041424344import sysfrom collections import dequeif __name__=='__main__':# sys.stdin=open("input.txt", "rt")board=[list(map(str,input())) for _ in range(8)] ##8x8 행렬 받기dQ=deque()dQ.append((0,7,0)) ##욱제는 0초에 (7,0)에서 시작visit=[[[0]*8 for _ in range(8)] for _ in range(0,9)] ## visit[time][x][y] time일때의 x,y좌표를 방문 했는지 0=방문 안 함, 1=방문 함dx=[1,0,-1,0,1,1,-1,-1,0] ##9방향으로 이동 가능dy=[0,1,0,-1,-1,1,1,-1,0]visit[0][7][0]=1ok=0while dQ:now=dQ.popleft()t=now[0] # 시각x=now[1]y=now[2]tt=min(t+1,8)if x==0 and y==7:ok=1for i in range(9):xx=x+dx[i]yy=y+dy[i]tt=min(t+1,8)if 0<=xx<8 and 0<=yy<8:if xx-t>=0 and board[xx-t][yy]=='#':continueif xx-t-1>=0 and board[xx-t-1][yy]=='#':continueif visit[tt][xx][yy]==0:visit[tt][xx][yy]=1dQ.append((tt,xx,yy))if ok==1:print(1)else:print(0)cs 2)두 번째는 1초가 흐를때마다 맨 아래 줄은 pop으로 없애고 '.'로만 이루어진 리스트를 첫번째 원소에 삽입하고
visit배열을 초기화시켜준다. 왜냐? 시간이 흐를때마다 리스트의 원소는 바뀌니까
그렇게하여 bfs를 진행하는 방식
두 번째 방식이 가장 무난하고 정통적인 방식이라 생각한다.
내가 충분히 소화 가능하고 자연스럽게 떠올릴 수 있는 발상
다른 조건 따지는 것들은 쉬우니 설명 생략
1234567891011121314151617181920212223242526272829303132333435363738394041impimport sysfrom collections import dequefrom itertools import combinationsif __name__=='__main__':#sys.stdin=open("input2.txt", "rt")board=[list(map(str,input())) for _ in range(8)]dx=[0,0,0,-1,1,-1,-1,1,1]dy=[0,1,-1,0,0,-1,1,1,-1]q=deque()q.append((7,0)) ##(x좌표,y좌표)t=['.']*8while q:for _ in range(len(q)):visit=[[-1]*8 for _ in range(8)]x,y=q.popleft()if x==0:print(1)exit()for k in range(9):nx=x+dx[k]ny=y+dy[k]if 0<=nx<8 and 0<=ny<8:if board[nx][ny]!='#':if board[nx-1][ny]!='#':#print(nx,ny)if visit[nx][ny]==-1:visit[nx][ny]=1q.append((nx,ny))s=board.pop()board.insert(0,t)print(0)cs '백준' 카테고리의 다른 글
BOJ 백준 파이썬 2668 숫자 고르기 (0) 2022.06.29 BOJ 백준 파이썬 13023 ABCDE (0) 2022.06.29 BOJ 백준 파이썬 2636 치즈 (0) 2022.06.29 BOJ 백준 파이썬 1600 말이 되고픈 원숭이 (0) 2022.06.29 BOJ 백준 파이썬 16973 직사각형 탈출 (0) 2022.06.29