Study | 성장기록/Algorithm

[Baekjoon]14891. 톱니바퀴

krozv 2024. 3. 12. 21:58

SWEA에서 비슷한 문제를 푼 경험이 있어서 수월하게 풀었음

크게 3단계로 나누어 풀이함

1. 각 톱니바퀴의 극을 비교하여 회전 가능성 판단

2. 회전 - 데크를 사용함

3. 점수 계산

# 14891. 톱니바퀴

import sys
from collections import deque

input = sys.stdin.readline
arr = [deque(map(int, list(input().strip()))) for _ in range(4)]
cnt = int(input())

for _ in range(cnt):
    # 1: 시계 방향, -1: 반시계 방향
    curr, d = map(int, input().split())
    curr -= 1
    temp = curr
    rot = [0] * 4
    rot[curr] = d
    # 오른쪽 방향 확인
    while rot[curr] and curr < 3:
        if arr[curr][2] != arr[curr+1][6]:
            rot[curr+1] = -rot[curr]
        curr += 1
    # 왼쪽 방향 확인
    curr = temp
    while rot[curr] and 0 < curr:
        if arr[curr][6] != arr[curr-1][2]:
            rot[curr-1] = -rot[curr]
        curr -= 1
    # 회전
    for i in range(4):
        # 시계 방향으로 회전하는 톱니바퀴라면
        if rot[i] == 1:
            arr[i].appendleft(arr[i].pop())
        # 반시계 방향 회전 톱니바퀴
        elif rot[i] == -1:
            arr[i].append(arr[i].popleft())

# 점수 계산
point = 0
# N극: 0, S극: 1
for i in range(4):
    if arr[i][0] == 1:
        point += 2 ** i
print(point)

'Study | 성장기록 > Algorithm' 카테고리의 다른 글

[Baekjoon]2467. 용액  (7) 2024.04.17
[Baekjoon]17144. 미세먼지 안녕!  (6) 2024.03.21
[Baekjoon]14502. 연구소  (4) 2024.03.14
[Baekjoon]14500. 테트로미노  (4) 2024.03.13
[Baekjoon]14503. 로봇 청소기  (3) 2024.03.12