BOJ 14891번: 톱니바퀴

2021. 9. 13. 23:03· 알고리즘💻/기타

https://www.acmicpc.net/problem/14891

 

14891번: 톱니바퀴

첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터

www.acmicpc.net

문제의 설명대로 말 그대로 "구현"하는 문제였다.

다만 문제의 조건을 이해하는 게 어려웠는데, 톱니바퀴가 회전 된 후의 상태로 비교하는 게 아니라 회전하기 전 상태를 기준으로 비교하는 것이라서 먼저 회전을 시키면.. 다음 번 톱니바퀴가 도는지 안도는지 확인할 때 어려움이 있었다.

 

톱니바퀴를 회전시킨다는 점에서 큐를 사용해야 한다는 것과, 재귀를 사용해야겠다는 아이디어가 떠올라 구현을 일단 해보았는데.. 처음에는 동시에 양쪽으로 가도록 구현을 했는데.. 이러니까 무한루프에 빠지게 되었다.😅

그래서 양쪽으로 가니까.. 왼쪽방향과 오른쪽방향 두 가지를 따로 생각해보았다. 그 방향으로 이동할 수 있고, 회전하는 경우면 재귀함수를 호출하고 마지막에 회전시키고 리턴하는 방식으로 구현했는데, 아니 이렇게 하니 또 처음 회전하는 바퀴가 두번이나 회전하게 되는것이다..!

그래서.. 그냥 왼쪽으로 한번 쭉 돌고 와서 처음  회전하는 바퀴를 다시 돌려놓았다...ㅋㅋ 더 좋은방법이 있을순 있겠지만.. 그냥 이렇게 할래..ㅠㅠ

 

구현하는 데 디테일한 부분이 어려운 게 많아 꽤 오래걸렸지만, 그래도 내 힘으로 끝까지 풀 수 있었어 나름 뿌듯했다...^^

import sys
from collections import deque
input = sys.stdin.readline
arr = []
for _ in range(4):
    arr.append(deque(list(input().rstrip())))

def moveright(a,b):
    if (a+1 < 4 and arr[a][2]!=arr[a+1][6]):
        moveright(a+1, b*-1)
    if (b==1):
        arr[a].appendleft(arr[a].pop())
    else:
        arr[a].append(arr[a].popleft())

    return
    
def moveleft(a,b):
    if (a-1 >= 0 and arr[a][6]!=arr[a-1][2]):
        moveleft(a-1, b*-1)
    if (b==1):
        arr[a].appendleft(arr[a].pop())
    else:
        arr[a].append(arr[a].popleft())

    return

def solve(a, b):
    moveright(a,b)

    if (b==1): #다시 돌려놓음.
        arr[a].append(arr[a].popleft())
    else:
        arr[a].appendleft(arr[a].pop())
    
    moveleft(a,b)

    return

K = int(input())
for _ in range(K):
    a, b = map(int, input().split())
    solve(a-1,b)


ans = 0
for i in range(4):
    if (arr[i][0]=='1'):
        ans += 2**i
print(ans)
저작자표시 (새창열림)

'알고리즘💻 > 기타' 카테고리의 다른 글

프로그래머스 Lv.1 - 추억 점수  (0) 2023.09.27
프로그래머스 Lv.1 - 달리기 경주  (0) 2023.09.27
BOJ 10610번: 30  (0) 2021.07.19
BOJ 2155번: 삼각형의 최단 경로  (0) 2021.05.26
'알고리즘💻/기타' 카테고리의 다른 글
  • 프로그래머스 Lv.1 - 추억 점수
  • 프로그래머스 Lv.1 - 달리기 경주
  • BOJ 10610번: 30
  • BOJ 2155번: 삼각형의 최단 경로
호프
호프
호프
Untitled
호프
전체
오늘
어제
  • 분류 전체보기 (341)
    • 오류😬 (4)
    • 스터디📖 (96)
      • 웹 개발 기초 (8)
      • Spring (20)
      • ML, DL (30)
      • Node.js (22)
      • React (0)
      • 블록체인 (12)
      • Go (3)
      • Javascript (1)
    • 알고리즘💻 (153)
      • 그리디 (23)
      • Bruteforce&Backtracking (16)
      • DP (17)
      • 이분탐색&정렬&분할정복 (17)
      • 누적합&투포인터 (6)
      • 스택&큐&덱 (19)
      • 그래프(DFS&BFS) (19)
      • 트리 (7)
      • 우선순위큐&다익스트라 (11)
      • 벨만포드&플로이드와샬 (8)
      • map&set&number theory (5)
      • 기타 (5)
    • 프로젝트 (3)
      • 캡스톤 디자인 프로젝트 (3)
    • 블록체인🔗 (3)
      • Solana (2)
      • 개발 (0)
      • Harmony (1)
    • ASC (6)
    • CS (73)
      • 데이터베이스 (12)
      • 클라우드컴퓨팅 (21)
      • 운영체제 (11)
      • 컴퓨터네트워크 (14)
      • 블록체인응용 (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 복습

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
호프
BOJ 14891번: 톱니바퀴
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.