Notice
Recent Posts
Recent Comments
Link
코딩 공부
[Python](구현) 백준 14891번 : 톱니바퀴 본문
728x90
<접근 방법>
- 우선, 톱니바퀴가 4개로 고정되어 있으므로 gear라는 이차원 배열을 4줄짜리로 받는다.
- 각 회전마다 선택된 기어(spin_gear)와 d(방향)이 정해지므로
각 회전별 톱니바퀴 4개의 방향 변화 정보를 저장할 status = [0, 0, 0, 0]를 만들어준다. - 선택된 기어(spin_gear)의 왼쪽과 오른쪽으로 나눠서 맞닿는 극이 서로 다르면 현재 방향에 -1을 곱해준 값을 저장하고, 극이 다르지 않다면 더이상 기어가 돌아가지 않으므로 break를 통해 for문을 빠져나온다.
(이때, 맞닿는 극이 각 gear의 2번째 원소인지, 6번째 원소인지 유의하도록 한다.) - 4개의 기어의 방향 정보가 모두 저장이 됐다면,
반시계 방향으로 회전(status[i]==-1)할 경우, 맨 앞 숫자를 떼서 맨 뒤로 붙이고,
시계 방향으로 회전(status[i]==1)할 경우, 맨 뒤 숫자를 떼서 맨 앞으로 붙인다. - 점수는 각 줄의 번호의 2의 각 줄 번호 제곱승이므로 2**i로 점수를 더해간다.
gear = [list(map(int, input())) for _ in range(4)]
K = int(input()) # K : 회전 횟수
for _ in range(K):
status = [0, 0, 0, 0] # 각 회전마다 톱니바퀴의 방향 변화 저장
spin_gear, d = map(int, input().split())
status[spin_gear-1] = d # 선택된 톱니바퀴 방향 저장
temp = d # 선택된 톱니 바퀴 방향 기준
# 왼쪽 톱니바퀴들
for number in range(spin_gear-1, 0, -1):
if gear[number][6] != gear[number-1][2]: # 극이 다르면 회전
temp *= -1
status[number-1] = temp
else: break
# 오른쪽 톱니바퀴들
temp = d
for number in range(spin_gear-1, 3):
if gear[number][2] != gear[number+1][6]: # 극이 다르면 회전
temp *= -1
status[number+1] = temp
else: break
# 방향 정보가 모두 저장됐다면
for i in range(4):
if status[i] == -1: # 반시계 방향으로 회전할 시
gear[i] = gear[i][1:] + [gear[i][0]]
elif status[i] == 1: # 시계 방향으로 회전할 시
gear[i] = [gear[i].pop()] + gear[i][:7]
total = 0
for i in range(4):
if gear[i][0] == 1: # 12시 방향 톱니바퀴가 S극이라면
total += 2**i
print(total)
이해가 안되는 부분이 있으면 질문 주세요. 감사합니다.
728x90
'삼성 SW 역량 테스트 기출 문제' 카테고리의 다른 글
[Python] 백준 20055번 : 컨베이어 벨트 위의 로봇 (0) | 2024.01.28 |
---|---|
[Python](구현, 조합) 백준 15685번 : 치킨 배달 (0) | 2024.01.18 |
[Python](구현) 백준 14503번 : 로봇 청소기 (0) | 2024.01.17 |
[Python](DFS) 백준 14888번 : 연산자 끼워넣기 (2) | 2024.01.16 |
[Python](DFS) 백준 14889번 : 스타트와 링크 (0) | 2024.01.15 |