백준/ Silver 1 문제 , 백준 파이썬 14891 , 톱니바퀴
Check Point ! ( 해당사항 ✓체크 )
1. 막힘 없이 수월하게 풀린 문제인가?
2. 1시간이내로 풀렸던 문제인가?
3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
4. 시간을 써도 도무지 풀 수 없는 문제인가?
5. 솔루션을 찾아봤는가?
-------------------------------------------------------------------------------------------
난이도 체감
1. 최상
2. 상
3. 중
4. 하
<이해도>
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함
<덧붙일 말>
함수를 호출할 때 방향에 -를 붙이는걸 신경쓰지 못하고 계속 답이 다르게 나와서 가만보니 한쪽이 시계방향이면 그 옆쪽은 반시계방향으로 호출했어야했는데 방향을 똑같이 그대로 집어넣었던 것.
<문제 출처>
https://www.acmicpc.net/problem/14891
------------------------------------------------------------------------------------------------------------------------------
처음에 deque 로 pop, popleft 를 사용할려 했는데, rotate 라는 기능이 있었다.
deque 선언후 roate를 활용하면 손 쉽게 원하는 방향이랑 칸만큼 재배열 해준다.
rotate(1) 이면 오른쪽으로 1칸씩
rotate(-1) 이면 왼쪽으로 1칸씩 이다.
입력값은 우선 이 코드로 받는다.
check 를 통해 num과 direction 을 입력받았을때 톱니바퀴가 맞물린 상태를 확인한다.
만약 서로 다른 극이 마주하고 있으면 회전시 돌아가게 False 값을 주고
같은 극이라면 True 값을 줘 이후 함수 선언에서 rotate를 할지 말지를 정해준다.
이후,
각각 오른쪽과 왼쪽 톱니바퀴를 다루는 함수를 설정해 다뤄준다.
num>4 와 num<1 을 통해 범위를 넘는건 걸러주기
위와 아래 코드 모드 rotate_right, rotate_left 를 호출 할 때 방향앞에 - 를 붙여 줬는데 옆에 톱니바퀴는 지금 돌아가는 톱니바퀴와 반대 방향으로 돌아가기 때문이다. 이 점을 유의해서 풀면 된다.
이후
다 돌아간 톱니바퀴에서 0번째 값들을 확인해 점수를 매겨준다.
1 2 4 8 씩 점수가 늘어나므로 2의 거듭제곱을 이용했다.
------------------------------------------------------------------------------------------------------------------------------
정답
from collections import deque
def rotate_right(num,direction):
if num>4:
return
if check[num-1]==False:
Gear[num].rotate(direction)
rotate_right(num+1,-direction)
def rotate_left(num,direction):
if num<1:
return
if check[num]==False:
Gear[num].rotate(direction)
rotate_left(num-1,-direction)
Gear=[0]
for i in range(4):
Gear.append(deque(list(map(int,list(input())))))
for _ in range(int(input())):
num, direction = map(int,input().split())
check=[True, Gear[1][2]==Gear[2][6], Gear[2][2]==Gear[3][6], Gear[3][2]==Gear[4][6], True]
Gear[num].rotate(direction)
rotate_right(num+1, -direction)
rotate_left(num-1, -direction)
score=0
for i in range(4):
if Gear[i+1][0]==1:
score+=2**i
print(score)
'알고리즘 공부 > 백준 - 파이썬' 카테고리의 다른 글
백준/ Silver 2 문제 , 백준 파이썬 4948, 베르트랑 공준 (0) | 2022.02.26 |
---|---|
백준/ Silver 5 문제 , 백준 파이썬 1417 , 국회의원 (0) | 2022.02.25 |
백준/ Silver 1 문제 , 백준 파이썬 9465 , 스티커 (0) | 2022.02.16 |
백준/ Silver 5 문제 , 백준 파이썬 11170 , 0의 개수 (0) | 2022.02.15 |
백준/ Silver 2 문제 , 백준 파이썬 11724 , 연결 요소의 개수, dfs (0) | 2022.02.14 |