[백준] q14891 톱니바퀴

5 분 소요

문제

네 톱니바퀴의 상태가 주어진다. N극은 0, S극은 1로 나타나있다. 그리고 주어진 회전 횟수 K만큼 회전시킨 톱니바퀴의 번호와 방향이 주어진다. 방향이 1인 경우는 시계 방향이고, -1인 경우는 반시계 방향이다.

톱니바퀴 A가 회전할 때, 그 옆에 있는 톱니바퀴 B와 맞닿는 톱니의 극이 다르다면, 톱니바퀴 A와 반대방향으로 톱니바퀴 B를 회전한다.

총 K번 회전시킨 이후에 네 톱니바퀴의 점수의 합을 계산하여 출력하라.

어떻게 풀 것인가?

톱니바퀴 A를 회전시킬 때, 나올 수 있는 모든 경우의 수를 if 조건문으로 구현한다.

def rotate_clockwise(arr):  # 톱니바퀴 시계 방향 회전
    # (arr)
    arr.insert(0, arr.pop())
    # print(arr)

def rotate_counterclockwise(arr):  # 톱니바퀴 반시계 방향 회전
    # print(arr)
    arr.append(arr.pop(0))
    # print(arr)

# 입력
arr_1 = list(input())  # 1번 톱니바퀴
arr_2 = list(input())  # 2번 톱니바퀴
arr_3 = list(input())  # 3번 톱니바퀴
arr_4 = list(input())  # 4번 톱니바퀴
k = int(input())  # 회전 횟수

rotation_seq = []
for _ in range(k):
    num, direc = map(int, input().split())  # 회전시킨 톱니바퀴의 번호, 방향(1: 시계 방향, -1: 반시계 방향)
    rotation_seq.append([num, direc])

for i in range(k):
    if rotation_seq[i][0] == 1:  # 1번 톱니바퀴
        if rotation_seq[i][1] == 1:  # 시계 방향 회전
            if arr_1[2] != arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_clockwise(arr_1)
                rotate_counterclockwise(arr_2)
                rotate_clockwise(arr_3)
                rotate_counterclockwise(arr_4)
            elif arr_1[2] == arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_clockwise(arr_1)
            elif arr_1[2] != arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_clockwise(arr_1)
                rotate_counterclockwise(arr_2)
            elif arr_1[2] != arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_clockwise(arr_1)
                rotate_counterclockwise(arr_2)
                rotate_clockwise(arr_3)
            elif arr_1[2] == arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_clockwise(arr_1)
            elif arr_1[2] == arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_clockwise(arr_1)
            elif arr_1[2] != arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_clockwise(arr_1)
                rotate_counterclockwise(arr_2)
            else:  # arr_1[2] == arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] == arr_4[6]
                rotate_clockwise(arr_1)
        else:  # 반시계 방향 회전
            if arr_1[2] != arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_counterclockwise(arr_1)
                rotate_clockwise(arr_2)
                rotate_counterclockwise(arr_3)
                rotate_clockwise(arr_4)
            elif arr_1[2] == arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_counterclockwise(arr_1)
            elif arr_1[2] != arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_counterclockwise(arr_1)
                rotate_clockwise(arr_2)
            elif arr_1[2] != arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_counterclockwise(arr_1)
                rotate_clockwise(arr_2)
                rotate_counterclockwise(arr_3)
            elif arr_1[2] == arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_counterclockwise(arr_1)
            elif arr_1[2] == arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_counterclockwise(arr_1)
            elif arr_1[2] != arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_counterclockwise(arr_1)
                rotate_clockwise(arr_2)
            else:  # arr_1[2] == arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] == arr_4[6]
                rotate_counterclockwise(arr_1)

    elif rotation_seq[i][0] == 2:  # 2번 톱니바퀴 회전
        if rotation_seq[i][1] == 1:  # 시계 방향 회전
            if arr_1[2] != arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_clockwise(arr_2)
                rotate_counterclockwise(arr_1)
                rotate_counterclockwise(arr_3)
                rotate_clockwise(arr_4)
            elif arr_1[2] == arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_clockwise(arr_2)
                rotate_counterclockwise(arr_3)
                rotate_clockwise(arr_4)
            elif arr_1[2] != arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_clockwise(arr_2)
                rotate_counterclockwise(arr_1)
            elif arr_1[2] != arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_clockwise(arr_2)
                rotate_counterclockwise(arr_3)
                rotate_counterclockwise(arr_1)
            elif arr_1[2] == arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_clockwise(arr_2)
            elif arr_1[2] == arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_clockwise(arr_2)
                rotate_counterclockwise(arr_3)
            elif arr_1[2] != arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_clockwise(arr_2)
                rotate_counterclockwise(arr_1)
            else:  # arr_1[2] == arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] == arr_4[6]
                rotate_clockwise(arr_2)
        else:  # 반시계 방향 회전
            if arr_1[2] != arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_counterclockwise(arr_2)
                rotate_clockwise(arr_1)
                rotate_clockwise(arr_3)
                rotate_counterclockwise(arr_4)
            elif arr_1[2] == arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_counterclockwise(arr_2)
                rotate_clockwise(arr_3)
                rotate_counterclockwise(arr_4)
            elif arr_1[2] != arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_counterclockwise(arr_2)
                rotate_clockwise(arr_1)
            elif arr_1[2] != arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_counterclockwise(arr_2)
                rotate_clockwise(arr_3)
                rotate_clockwise(arr_1)
            elif arr_1[2] == arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_counterclockwise(arr_2)
            elif arr_1[2] == arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_counterclockwise(arr_2)
                rotate_clockwise(arr_3)
            elif arr_1[2] != arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_counterclockwise(arr_2)
                rotate_clockwise(arr_1)
            else:  # arr_1[2] == arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] == arr_4[6]
                rotate_counterclockwise(arr_2)

    elif rotation_seq[i][0] == 3:  # 3번 톱니바퀴 회전
        if rotation_seq[i][1] == 1:  # 시계 방향 회전
            if arr_1[2] != arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_clockwise(arr_3)
                rotate_counterclockwise(arr_2)
                rotate_counterclockwise(arr_4)
                rotate_clockwise(arr_1)
            elif arr_1[2] == arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_clockwise(arr_3)
                rotate_counterclockwise(arr_2)
                rotate_counterclockwise(arr_4)
            elif arr_1[2] != arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_clockwise(arr_3)
                rotate_counterclockwise(arr_4)
            elif arr_1[2] != arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_clockwise(arr_3)
                rotate_counterclockwise(arr_2)
                rotate_clockwise(arr_1)
            elif arr_1[2] == arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_clockwise(arr_3)
                rotate_counterclockwise(arr_4)
            elif arr_1[2] == arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_clockwise(arr_3)
                rotate_counterclockwise(arr_2)
            elif arr_1[2] != arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_clockwise(arr_3)
            else:
                rotate_clockwise(arr_3)
        else:  # 반시계 방향 회전
            if arr_1[2] != arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_counterclockwise(arr_3)
                rotate_clockwise(arr_2)
                rotate_clockwise(arr_4)
                rotate_counterclockwise(arr_1)
            elif arr_1[2] == arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_counterclockwise(arr_3)
                rotate_clockwise(arr_2)
                rotate_clockwise(arr_4)
            elif arr_1[2] != arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_counterclockwise(arr_3)
                rotate_clockwise(arr_4)
            elif arr_1[2] != arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_counterclockwise(arr_3)
                rotate_clockwise(arr_2)
                rotate_counterclockwise(arr_1)
            elif arr_1[2] == arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_counterclockwise(arr_3)
                rotate_clockwise(arr_4)
            elif arr_1[2] == arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_counterclockwise(arr_3)
                rotate_clockwise(arr_2)
            elif arr_1[2] != arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_counterclockwise(arr_3)
            else:
                rotate_counterclockwise(arr_3)

    else:  # 4번 톱니바퀴 회전
        if rotation_seq[i][1] == 1:  # 시계 방향 회전
            if arr_1[2] != arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_clockwise(arr_4)
                rotate_counterclockwise(arr_3)
                rotate_clockwise(arr_2)
                rotate_counterclockwise(arr_1)
            elif arr_1[2] == arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_clockwise(arr_4)
                rotate_counterclockwise(arr_3)
                rotate_clockwise(arr_2)
            elif arr_1[2] != arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_clockwise(arr_4)
                rotate_counterclockwise(arr_3)
            elif arr_1[2] != arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_clockwise(arr_4)
            elif arr_1[2] == arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_clockwise(arr_4)
                rotate_counterclockwise(arr_3)
            elif arr_1[2] == arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_clockwise(arr_4)
            elif arr_1[2] != arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_clockwise(arr_4)
            else:
                rotate_clockwise(arr_4)
        else:  # 반시계 방향 회전
            if arr_1[2] != arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_counterclockwise(arr_4)
                rotate_clockwise(arr_3)
                rotate_counterclockwise(arr_2)
                rotate_clockwise(arr_1)
            elif arr_1[2] == arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_counterclockwise(arr_4)
                rotate_clockwise(arr_3)
                rotate_counterclockwise(arr_2)
            elif arr_1[2] != arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_counterclockwise(arr_4)
                rotate_clockwise(arr_3)
            elif arr_1[2] != arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_counterclockwise(arr_4)
            elif arr_1[2] == arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] != arr_4[6]:
                rotate_counterclockwise(arr_4)
                rotate_clockwise(arr_3)
            elif arr_1[2] == arr_2[6] and arr_2[2] != arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_counterclockwise(arr_4)
            elif arr_1[2] != arr_2[6] and arr_2[2] == arr_3[6] and arr_3[2] == arr_4[6]:
                rotate_counterclockwise(arr_4)
            else:
                rotate_counterclockwise(arr_4)

# print(arr_1)
# print(arr_2)
# print(arr_3)
# print(arr_4)
# 점수 계산
score = 0
if arr_1[0] == '1':
    score += 1
if arr_2[0] == '1':
    score += 2
if arr_3[0] == '1':
    score += 4
if arr_4[0] == '1':
    score += 8

# 결과 출력
print(score)

카테고리:

업데이트:

댓글남기기