GW LABS

[Backjoon] 톱니바퀴 본문

Algorithm & DataStructure

[Backjoon] 톱니바퀴

GeonWoo Kim 2020. 12. 10. 09:46

14891번 톱니바퀴는 구현 및 시뮬레이션 문제로 좋은 연습이 된 문제다. 4개의 기어들이 회전방향에 따라서 옆에 붙어있는 기어들도 회전시킨다. 그런데 서로 맞물린 극성이 다르다면 회전시킬 수 없고, 회전시킬 수 없는 기어에 맞물린 기어들도 회전시킬 수 없다. 문제를 읽어가면서 부담감이 컸는데 천천히 구현해가면 충분히 풀이할 수 있는 문제였다. 구현과 시뮬레이션 관련한 문제를 좀 더 연습을 많이 해야겠다.

 

import sys
from collections import deque

if __name__ == "__main__":
    gears = []
    for _ in range(4):
        gears.append(deque(list(map(int, list(sys.stdin.readline().replace("\n", ""))))))

    rotates = []
    rotate_count = int(sys.stdin.readline())
    for _ in range(rotate_count):
        rotates.append(list(map(int, sys.stdin.readline().split(" "))))

    for number_gear, direction in rotates:
        have_to_ratate = [0, 0, 0, 0]

        idx_gear = number_gear - 1
        have_to_ratate[idx_gear] = direction

        # 정방향 기어들의 회전방향을 결정한다.
        temp_direction = direction
        idx_last_gear, idx_near_gear = idx_gear, idx_gear
        while idx_near_gear < 3:
            idx_near_gear += 1

            temp_direction *= -1
            if gears[idx_last_gear][2] != gears[idx_near_gear][6]:
                have_to_ratate[idx_near_gear] = temp_direction
            else:
                break

            idx_last_gear = idx_near_gear

        # 역방향 기어들의 회전방향을 결정한다.
        temp_direction = direction
        idx_last_gear, idx_near_gear = idx_gear, idx_gear
        while idx_near_gear > 0:
            idx_near_gear -= 1

            temp_direction *= -1
            if gears[idx_last_gear][6] != gears[idx_near_gear][2]:
                have_to_ratate[idx_near_gear] = temp_direction
            else:
                break

            idx_last_gear = idx_near_gear

        # 기어들을 회전시킨다.
        for idx, direct in enumerate(have_to_ratate):
            gears[idx].rotate(direct)

    answer = 0
    for idx, gear in enumerate(gears):
        answer += (2**idx) * gear[0]

    print(answer)

'Algorithm &amp; DataStructure' 카테고리의 다른 글

[Backjoon] 회전하는 큐  (0) 2020.12.18
[Backjoon] 통나무 건너뛰기  (0) 2020.12.13
[Backjoon] 저울  (0) 2020.12.07
[Backjoon] 영역 구하기  (0) 2020.11.30
[Backjoon] 단어 뒤집기 2  (0) 2020.11.26
Comments