문제
https://www.acmicpc.net/problem/14891
코드
from collections import deque
# appendleft 사용하기 위해 deque사용
array=[deque(map(int, list(input().strip()))) for _ in range(4)]
def cal():
result=0
for i in range(4):
if array[i][0]==1:
# 2의 제곱
result+=(2**i)
print(result)
# 맨 앞을 빼고, 그것을 맨 뒤에 넣기
def turnL(i):
temp=array[i].popleft()
array[i].append(temp)
# 맨 뒤를 빼고, 그것을 맨 앞에 넣기
def turnR(i):
temp=array[i].pop()
array[i].appendleft(temp)
def search(num,dir):
# 동시에 바뀌므로 dp에 방향을 저장
dp[num]=dir
if visited[num]==False:
if num>0:
if array[num-1][2]!=array[num][6] and visited[num-1]==False:
visited[num]=True
search(num-1,dir*-1)
if num<3:
if array[num][2]!=array[num+1][6] and visited[num+1]==False:
visited[num]=True
search(num+1,dir*-1)
k=int(input())
for _ in range(k):
dp=[0]*4
visited=[False]*4
num,dir=map(int, input().split())
search(num-1,dir)
for i in range(4):
if dp[i]==1:
turnR(i)
elif dp[i]==-1:
turnL(i)
cal()
어려웠던 부분
연쇄적으로 회전하는 부분을 bfs를 통해 해결하였고, 동시에 돌아가는 부분은 dp에 방향을 따로 저장 해뒀다가 search가 끝나고 동시에 회전 시켰다.
'문제풀이 > 구현' 카테고리의 다른 글
● [파이썬] [구현] 백준 21610 마법사 상어와 비바라기 (0) | 2023.03.22 |
---|---|
@ [파이썬] [구현] 백준 21608 상어 초등학교 (0) | 2023.03.20 |
[파이썬] [구현] 백준 14889 스타트와 링크 (0) | 2023.03.17 |
[파이썬] [구현] 백준 2531 회전 초밥 (0) | 2023.03.03 |
[파이썬] [구현] 백준 2932 표 회전 (0) | 2023.01.28 |