[백준]14891(파이썬) - 톱니바퀴
resilient
·2021. 12. 9. 13:22
728x90
반응형
- 이 문제를 읽고 처음 든 생각은 '일단 톱니바퀴가 4개로 정해져 있기 때문에 다행이다'였습니다.
- 먼저 톱니바퀴가 시계방향으로 돌 때, 반시계 방향으로 돌 때를 구현해주기 위해 함수 두 개를 만들어줬습니다.
- 톱니바퀴가 4개밖에 없지만, 하나의 톱니바퀴를 돌릴 때 다른 톱니바퀴 들도 영향을 미치는 점을 고려해서
DFS로 풀어줬습니다. - 한 번 체크한 톱니바퀴는 방문처리를 해주고, 만약에 톱니바퀴가 돈다면, 영향을 준 이전 톱니바퀴의 반대 방향으로 돌도록 구현을 했습니다.
- 다음 톱니바퀴에 영향을 주는지 안 주는지 (DFS로 넘어가는 조건)를 확인하는 if문을 걸어주고, dfs 재귀를 이용하면 DFS함수 구현은 끝이 납니다.
- 그 이후로 톱니바퀴 각각의 맨 위 (인덱스 0 번째) 숫자가 1이면 각각 점수를 구해서 더해주면 값을 구할 수 있습니다.
import sys
input = sys.stdin.readline
graph = []
# N이 0 이고 S가 1이다.
for _ in range(4):
graph.append(list(input().rstrip()))
k = int(input())
data = []
def rotate_clock(graph):
temp = graph[7]
for i in range(6,-1,-1):
graph[i+1] = graph[i]
graph[0] = temp
def rotate_ban_clock(graph):
temp = graph[0]
for i in range(7):
graph[i] = graph[i+1]
graph[7] = temp
def dfs(x,y):
global visited
if visited[x] == 0:
visited[x] = 1
left = graph[x][6]
right = graph[x][2]
if y == 1: # 시계방향일떄
rotate_clock(graph[x])
else:
rotate_ban_clock(graph[x])
if x-1 >= 0 and left != graph[x-1][2]:
dfs(x-1,-y) # 방향은 지금 톱니바퀴가 도는 방향과 반대로 돈다.
if x+1 <=3 and right != graph[x+1][6]:
dfs(x+1,-y)
for _ in range(k):
a,b = map(int,input().split())
visited = [0] * 4
dfs(a-1,b)
cnt = 0
for i in range(4):
if graph[i][0] =='1':
cnt += (2**i)
print(cnt)
반응형
'자료구조 & 알고리즘 > 백준(Baekjoon)' 카테고리의 다른 글
[백준]21610(파이썬) - 마법사 상어와 비바라기 (0) | 2021.12.31 |
---|---|
[백준]16928(파이썬) - 뱀과 사다리 게임 (0) | 2021.12.29 |
[백준]14503(파이썬) - 로봇청소기 (6) | 2021.12.06 |
[백준] 14501(파이썬) - 퇴사 (0) | 2021.12.03 |
[백준] 14502(파이썬) - 연구소 (0) | 2021.12.02 |