본문 바로가기

취업과 기본기 튼튼/코딩 테스트 노트

[BOJ] 14891. 톱니바퀴

문제

톱니바퀴 (https://www.acmicpc.net/problem/14891)

풀이

1. 초기 접근

  • 문제조건 해석
    • 각 스텝에 따라, 기존 자료구조의 값이 바뀌는데, 바뀌는게 연쇄적이다.
      • 시뮬레이션 + DFS 문제다.
  • 알고리즘
    • 문제 조건에서, 많은걸 알려주는데, 일단 톱니바퀴를 리스트로 표현할 수 있음을 알 수 있다.
    • 그리고 톱니바퀴의 회전은 리스트 요소들을 왼쪽 혹은 오른쪽으로 시프트하는 것임을 알 수 있다.
      • deque.rotate() 가 있다!
    • 회전 조건은, 정해진 인덱스를 비교하면 된다.
  • 코드
from collections import deque
from sys import setrecursionlimit

setrecursionlimit(10**8)

def dfs(no, di, visited):
    visited.add(no)
    # 오른쪽 회전
    if no+1 <= 3 and tobs[no][2] != tobs[no+1][6] and no+1 not in visited:
        dfs(no+1, di * (-1), visited)
    # 왼쪽 회전
    if no-1 >= 0 and tobs[no][6] != tobs[no-1][2] and no-1 not in visited:
        dfs(no-1, di * (-1), visited)
    # 나 회전
    tobs[no].rotate(di)

tobs = [deque(list(input())) for _ in range(4)]

tc = int(input())
for t in range(tc):
    no, di = list(map(int, input().split()))

    dfs(no-1, di, set())

answer = 0
for i, tob in enumerate(tobs):
    if tob[0] == '1':
        answer += 1<<i
print(answer)

'취업과 기본기 튼튼 > 코딩 테스트 노트' 카테고리의 다른 글

[BOJ] 2493. 탑  (2) 2019.04.18
[BOJ] 17135. 캐슬 디펜스  (0) 2019.04.12
[BOJ] 12100. 2048 (Easy)  (2) 2019.04.11
[BOJ] 14499. 주사위 굴리기  (0) 2019.04.11
[BOJ] 14501. 퇴사  (0) 2019.04.10