문제
https://www.acmicpc.net/problem/14891
14891번: 톱니바퀴
총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴
www.acmicpc.net
내 풀이
dir에 돌려야 할 방향을 저장하고, 나중에 한꺼번에 톱니를 돌리는 것이 핵심이다.
1은 시계방향, -1은 반시계 방향, 0은 부동이다.
회전시킨 톱니바퀴를 기준으로 왼쪽을 검사하고, 오른쪽을 검사하면 된다.
wheels = [input() for _ in range(4)]
K = int(input())
def clock(wheel):
return wheel[-1] + wheel[:-1]
def counter_clock(wheel):
return wheel[1:] + wheel[0]
def move(wheels, idx, d):
dir = [0]*4
dir[idx] = d
# left
for i in range(idx-1, -1, -1):
if dir[i+1] and wheels[i+1][-2] != wheels[i][2]:
dir[i] = dir[i+1] * -1
# right
for i in range(idx+1, 4):
if dir[i-1] and wheels[i-1][2] != wheels[i][-2]:
dir[i] = dir[i-1] * -1
for i in range(4):
if dir[i] == 1:
wheels[i] = clock(wheels[i])
elif dir[i] == -1:
wheels[i] = counter_clock(wheels[i])
for _ in range(K):
idx, d = map(int, input().strip().split())
idx -= 1
move(wheels, idx, d)
ans = 0
for i in range(4):
if wheels[i][0] == '1':
ans += 2**i
print(ans)
총평
머리 개조..?
'알고리즘 > 삼성 기출' 카테고리의 다른 글
상어 중학교 [백준 21609번] (0) | 2022.10.11 |
---|---|
게리맨더링 2 [백준 17779번] (0) | 2022.10.10 |
아기 상어 [백준 16236번] (1) | 2022.10.08 |
나무 재테크 [백준 16235번] (1) | 2022.10.08 |
경사로 [백준 14890번] (1) | 2022.10.08 |