티스토리 뷰
반응형
백준 14891번: 톱니바퀴 (파이썬) 문제 풀이
문제 설명
백준 14891번 톱니바퀴 문제는 4개의 톱니바퀴가 주어지고, 각각 8개의 톱니(극: N=0, S=1)로 구성되어 있을 때, 주어진 회전 명령에 따라 톱니들이 어떻게 움직이는지를 시뮬레이션한 뒤 최종 점수를 계산하는 문제입니다.
핵심 규칙
- 회전 명령을 받은 톱니는 무조건 회전합니다.
- 인접한 톱니는 서로 맞닿은 극이 다르면 반대 방향으로 회전합니다.
- 맞닿은 극이 같으면 그쪽 전파는 멈춥니다.
- 최종 점수는 다음과 같이 계산됩니다.
- 1번 톱니의 12시 방향이 S극 → +1점
- 2번 톱니의 12시 방향이 S극 → +2점
- 3번 톱니의 12시 방향이 S극 → +4점
- 4번 톱니의 12시 방향이 S극 → +8점
접근 방법
- 4개의 톱니바퀴를 각각 리스트로 저장하고, 각 톱니의 극(0 또는 1)을 원소로 다룹니다.
- 톱니바퀴 회전은 리스트의 원소를 시계/반시계 방향으로 한 칸씩 이동시키는 함수로 구현합니다.
- 회전 명령이 주어졌을 때, 해당 톱니바퀴를 기준으로 양 옆 톱니바퀴들의 회전 여부와 방향을 먼저 결정합니다. 이는 인접한 톱니바퀴의 맞닿은 극이 다른지 확인하면 됩니다.
- 맞닿은 극은 왼쪽 톱니의 2번 인덱스와 오른쪽 톱니의 6번 인덱스를 비교하여 판단합니다.
- 톱니바퀴의 회전 방향을 저장할
check
배열을 사용합니다. 1은 시계, -1은 반시계, 0은 회전하지 않음을 의미합니다. - 모든 톱니바퀴의 회전 방향이 결정된 후, 한 번에 모든 톱니바퀴를 회전시킵니다.
- 마지막으로, 각 톱니바퀴의 12시 방향(0번 인덱스)의 극을 확인하여 최종 점수를 계산합니다.
전체 코드 (Python)
def Clockwise(arr:list, direction):
next=0
if direction == 1:
prev = arr[0]
for i in range(1, 8):
next = arr[i]
arr[i] = prev
prev = next
arr[0] = prev
elif direction == -1:
prev = arr[7]
for i in range(6, -1, -1):
next = arr[i]
arr[i] = prev
prev = next
arr[7] = prev
arr=[]
for _ in range(4):
temp = input()
arr1 = []
for j in temp:
arr1.append(int(j))
arr.append(arr1)
k = int(input())
for _ in range(k):
top, clock = map(int, input().split())
check = [0, 0, 0, 0]
check[top-1] = clock
# 오른쪽 방향 전파
for i in range(top, 4):
if arr[i-1][2] != arr[i][6]:
check[i] = -check[i-1]
else:
break
# 왼쪽 방향 전파
for i in range(top-1, 0, -1):
if arr[i-1][2] != arr[i][6]:
check[i-1] = -check[i]
# 모든 톱니바퀴 회전
for i in range(4):
if check[i] == 1:
Clockwise(arr[i], 1)
elif check[i] == -1:
Clockwise(arr[i], -1)
sumArr = arr[0][0] + 2 * arr[1][0] + 4 * arr[2][0] + 8 * arr[3][0]
print(sumArr)
반응형
'백준 스터디' 카테고리의 다른 글
백준 흙길 보수하기 1911번 파이썬 (0) | 2025.08.30 |
---|---|
백준 1911번 흙길 보수하기 C++ (0) | 2025.08.30 |
백준 14891번: 톱니바퀴 (C++) 문제 풀이 (1) | 2025.08.30 |
백준 등수 구하기 1205 python (2) | 2025.08.28 |
백준 등수 구하기 (1205번) C++ (2) | 2025.08.27 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 알고리즘기초
- 코딩 테스트
- c++알고리즘
- 파이썬
- python 알고리즘
- 그리디
- 그리디알고리즘
- 문제 풀이
- 코딩
- 문자열처리
- Python
- 문제풀이
- dfs
- 브루트포스
- 알고리즘문제풀이
- 알고리즘
- 알고리즘 문제풀이
- c언어
- 백준
- 파이썬코딩
- C++
- 동적계획법
- 동적 계획법
- 객체지향
- 그래프 탐색
- 프로그래밍
- 인접 행렬
- DP
- C++ 알고리즘
- 코딩테스트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함
반응형