1. 문제
2. 접근 방법
문제에 나온대로 차근차근 구현을 하면 됩니다
연결되어 있을 경우 홀수 톱니는 홀수끼리, 짝수 톱니는 짝수끼리 같은 방향으로 회전한다는 점에서 착안해
1. 연결된 톱니 구하기
2. [1, -1, 1, -1] 인지 [-1, 1, -1, 1]인지 구하기
3. 각각의 방향에 맞추어 톱니 회전해주기
로 진행했습니다.
그리고 idx를 바꾸면 디버깅하기 어려울 것 같아
그냥 톱니를 deque로 만들고
시계 방향 회전인 경우, 맨 뒤에 있는 요소를 맨 앞으로 넣어주고
반시계 방향 회전인 경우, 맨 앞에 있는 요소를 맨 뒤로 넣어줬습니다.
3. 코드
python
from collections import deque
def score():
ans = 0
for i in range(4):
if status[i][0] == 1:
ans += (2 ** i)
return ans
def rotate(i, d):
global status
# 반시계 방향
if d == -1:
a = status[i].popleft()
status[i].append(a)
# 시계 방향
elif d == 1:
a = status[i].pop()
status[i].appendleft(a)
def solve(i, d):
temp_dir = [[1, -1, 1, -1], [-1, 1, -1, 1]]
dir = temp_dir[0] if temp_dir[0][i] == d else temp_dir[1]
for i in range(4):
if connection[i]:
rotate(i, dir[i])
def isConnection(i):
global connection, visited
if not visited[i]:
visited[i] = True
if i-1 >= 0:
if status[i][6] + status[i-1][2] == 1:
connection[i-1] = True
isConnection(i-1)
if i+1 < 4:
if status[i][2] + status[i+1][6] == 1:
connection[i+1] = True
isConnection(i+1)
return
# 12시방향부터 시계방향 순서대로, N극은 0, S극은 1
status = [deque(list(map(int, input()))) for _ in range(4)]
K = int(input())
# (회전시킨 톱니바퀴의 번호, 1인경우 시계방향/-1인경우 반시계방향)
orders = [tuple(map(int, input().split())) for _ in range(K)]
for order in orders:
idx, dir = order[0]-1, order[1]
connection = [False]*4
visited = [False] * 4
connection[idx] = True
isConnection(idx)
solve(idx, dir)
print(score())
4. 마치며
마치며~!
'Algorithm > Python' 카테고리의 다른 글
[백준 15683] 감시 (0) | 2021.04.18 |
---|---|
[백준 15685] 드래곤 커브 (0) | 2021.04.18 |
[백준 14889] 스타트와 링크 (0) | 2021.04.18 |
[백준 14888] 연산자 끼워넣기 (0) | 2021.04.18 |
[백준 14503] 로봇 청소기 (0) | 2021.04.17 |