[BOJ] 15662 톱니바퀴 2

시뮬레이션


톱니바퀴 1번과 똑같지만 해당 문제는 톱니바퀴 개수가 4개 고정이 아니라 1 ~ 1000이다.

따라서 단순 if-else가 아니라 반복문을 통한 구현이 필요해보인다.

따라서 회전가능한 톱니바퀴의 상한, 하한을 구해서 해당 범위 내의 톱니바퀴를 회전하는 방향으로 구현했다.

import sys

def rotate(li, di):
    if di == 1:     # 오른쪽 방향
        return li[-1:] + li[:-1]
    return li[1:] + li[:1]  # 왼쪽 방향

T = int(sys.stdin.readline().rstrip())
gears = []
for _ in range(T):
    gears.append(list(sys.stdin.readline().rstrip()))
K = int(sys.stdin.readline().rstrip())

for _ in range(K):
    gear_n, direction = map(int, sys.stdin.readline().split())
    # 기준으로부터 오른쪽 상한 정하기
    lower, upper = gear_n, gear_n
    for i in range(gear_n-1, T-1):
        if gears[i][2] != gears[i+1][6]:
            upper += 1
        else:
            break
    # 기준으로부터 왼쪽 하한 정하기
    for i in range(gear_n-1, 0, -1):
        if gears[i][6] != gears[i-1][2]:
            lower -= 1
            direction = -direction
        else:
            break
    # 하한 부터 상한까지 전부 rotate
    for i in range(lower-1, upper):
        gears[i] = rotate(gears[i], direction)
        direction = -direction

answer = 0
for i in range(T):
    if gears[i][0] == '1':
        answer += 1
print(answer)

태그:

카테고리:

업데이트: