링크 : https://www.acmicpc.net/problem/14891
14891번: 톱니바퀴
첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터
www.acmicpc.net
- 문제
- 소요시간: 50분 38초
- 설계하기(접근방법)
1. 입력받기
톱니의 상태와
회전할 톱니번호, 회전 방향을 입력받는다
2. 구현하기
톱니 문제는 rotate를 해야하기 때문에
deque의 자료구조를 사용하는 것이 좋다
톱니 4개를 덱으로 선언을 해준다
그 후 각각의 톱니가 맞물려있는 지점의
상태를 저장해 준다
톱니 1,2,3,4 에 대해서
각각 로직이 꼬이지 않도록 회전 순서를 정하여 구현한다
3. 출력하기
각각 12시 방향의 상태를 가중치를 부여하여 출력한다
- 코드(출력)
# N 극은 0 , S 극은 1
# 12시 방향부터 톱니바퀴의 방향이 주어진다
from collections import deque
### 비교할 덱리스트 넘버
### 톱니 1[2] 와 톱니2의 [6]
### 톱니 2[2] 와 톱니3의 [6]
### 톱니 3[2] 와 톱니4의 [6]
saw_1 = deque(map(int,input()))
saw_2 = deque(map(int,input()))
saw_3 = deque(map(int,input()))
saw_4 = deque(map(int,input()))
t = int(input())
for i in range(t):
saw_num, rotate_direction = map(int, input().split())
saw_status = [int(saw_1[2] != saw_2[6]), int(saw_2[2] != saw_3[6]), int(saw_3[2] != saw_4[6]) ]
# 톱니 시작번호 1
if saw_num == 1:
# 1번 회전
saw_1.rotate(rotate_direction)
# 1,2가 다르다면
if saw_status[0] == 1:
saw_2.rotate(-rotate_direction)
# 2,3이 다르다면
if saw_status[1] == 1:
saw_3.rotate(rotate_direction)
# 3,4가 다르다면
if saw_status[2] == 1:
saw_4.rotate(-rotate_direction)
# 톱니 시작번호 2
if saw_num == 2:
# 2번 회전
saw_2.rotate(rotate_direction)
# 1,2, 다르다면 회전
if saw_status[0] == 1:
saw_1.rotate(-rotate_direction)
# 2,3이 다르다면
if saw_status[1] == 1:
saw_3.rotate(-rotate_direction)
# 3,4가 다르다면
if saw_status[2] == 1:
saw_4.rotate(rotate_direction)
# 톱니 시작번호 3
if saw_num == 3:
saw_3.rotate(rotate_direction)
# 1,2, 다르다면 회전
if saw_status[2] == 1:
saw_4.rotate(-rotate_direction)
# 2,3이 다르다면
if saw_status[1] == 1:
saw_2.rotate(-rotate_direction)
# 3,4가 다르다면
if saw_status[0] == 1:
saw_1.rotate(rotate_direction)
# 톱니 시작번호 4
if saw_num == 4:
saw_4.rotate(rotate_direction)
# 1,2가 다르다면
if saw_status[2] == 1:
saw_3.rotate(-rotate_direction)
# 2,3이 다르다면
if saw_status[1] == 1:
saw_2.rotate(rotate_direction)
# 3,4가 다르다면
if saw_status[0] == 1:
saw_1.rotate(-rotate_direction)
print(saw_1[0] + 2 * saw_2[0] + 4 * saw_3[0] + 8 * saw_4[0] )
- 얻어갈 부분
1. 복사 붙여넣기를 할 때 숫자와 방향을 주의해서 넣자. 마지막 출력에 인덱스 넘버를 1들로 넣어서 찾기 힘들었다. 주의하자
'알고리즘(백준) > 구현' 카테고리의 다른 글
[알고리즘/구현] 1475번 : 방 번호 - python (0) | 2024.02.17 |
---|---|
[알고리즘/구현] 21610번 : 마법사 상어와 비바라 - python (0) | 2024.02.14 |
[알고리즘/구현] 21608번 : 상어 초등학교 - python (0) | 2024.02.14 |
[알고리즘/구현] 20055번 : 컨베이어 벨트 위의 로봇 - python (0) | 2024.01.02 |
[알고리즘/구현] 2563번 : 색종이 - python (0) | 2023.12.31 |