본문 바로가기
Coding Test/BOJ

[백준] 14891 - 톱니바퀴 [Python(파이썬)]

'삼성 SW 역량 테스트' 기출 문제 입니다. 😀

문제 👉 14891번: 톱니바퀴

1. 문제

  1. 톱니바퀴는 총 4개 존재한다.
  2. 톱니바퀴는 총 8개의 톱니를 가지고, 톱니는 N극과 S극 중 하나를 가진다.
  3. 톱니바퀴의 회전은 시계 방향(0)과 반시계 방향(1)이 있고 K번 회전한다.
  4. 특정 톱니바퀴가 회전할 때, 인접한 톱니는 극이 다르면 반대로 회전하고, 같으면 회전하지 않는다.
  5. 총 K번 회전시킨 이후에 네 톱니바퀴의 12시 방향을 통해 점수를 출력한다.

2. 풀이

시뮬레이션을 이용한 문제 풀이

  1. 톱니바퀴의 회전 함수를 구현한다.
  2. K번의 회전 마다 회전하는 톱니와 방향을 배열에 저장한다.
  3. 배열에 존재하는 톱니 회전한다.

3. 코드

T = [list(map(int, input().strip())) for _ in range(4)]
K  = int(input())
R = [list(map(int, input().split())) for _ in range(K)]

def solution():
    ret = 0

    def rotate(i, r):
        if r == 1: # 시계
            tmp = T[i-1][-1]
            for j in range(8):
                T[i-1][j], tmp = tmp, T[i-1][j]
        else:    # 반시계
            tmp = T[i-1][0]
            for j in range(7, -1, -1):
                T[i-1][j], tmp = tmp, T[i-1][j]


    for i, r in R:
        arr = [(i,r)]
        # 오른쪽
        ni, nr = i, r
        while ni < 4: # 1,2,3 톱니바퀴는 오른쪽 확인
            if T[ni-1][2] != T[ni][6]:
                nr = -nr
                ni += 1
                arr.append((ni, nr))
            else:
                break
        # 왼쪽
        ni, nr = i, r
        while ni > 1: # 2,3,4 톱니바퀴는 왼쪽 확인
            if T[ni-1][6] != T[ni-2][2]:
                nr = -nr
                ni -= 1
                arr.append((ni, nr))
            else:
                break
        # 회전
        for a, b in arr:
            rotate(a,b)
    # 점수의 합
    for i in range(4):
        if T[i][0] == 1:
            ret += 2**i

    return ret

print(solution())
  • 결과 : 76 ms

References

  •  

🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋

댓글