티스토리 뷰

문제 링크

 

14891번: 톱니바퀴

총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴

www.acmicpc.net

풀이

# 톱니바퀴 주어진 방향으로 회전시키기
def rotate_gears(gear, direction):
    if direction == 1:    # 시계 방향 회전
        return gear[-1] + gear[:-1]
    else:    # 반시계 방향 회전
        return gear[1:] + gear[0]

# 톱니바퀴 회전시키고 최종 점수 계산
def solve(gears, rotations):
    for gear_num, direction in rotations:    # (톱니바퀴 번호, 회전 방향)
        gear_idx = gear_num - 1    # 인덱스 0부터 시작하도록 조정
        
        # 각 톱니바퀴에 대해 회전 방향 결정
        directions = [0] * 4
        directions[gear_idx] = direction

        # 오른쪽 톱니바퀴 확인
        for i in range(gear_idx, 3):
            if gears[i][2] != gears[i + 1][6]:
                directions[i + 1] = -directions[i]
            else:
                break

        # 왼쪽 톱니바퀴 확인
        for i in range(gear_idx, 0, -1):
            if gears[i][6] != gears[i - 1][2]:
                directions[i - 1] = -directions[i]
            else:
                break

        # 톱니 회전
        for i in range(4):
            if directions[i] != 0:
                gears[i] = rotate_gears(gears[i], directions[i])
    # 점수 계산
    return sum([(2 ** i) * int(gears[i][0]) for i in range(4)])

if __name__ == "__main__":
    # 입력 받기
    gears = [input().strip() for _ in range(4)]
    K = int(input())
    rotations = [tuple(map(int, input().split())) for _ in range(K)]

    result = solve(gears, rotations)
    print(result)