https://www.acmicpc.net/problem/14891
해당 문제는 구현 문제입니다.
문제의 목표는 k번 회전한 후 각 톱니바퀴의 12시 방향에 있는 극에 따라 점수를 계산하고 점수의 합을 구하는 것입니다.
톱니바퀴가 회전하는 경우는 두 가지로 나뉩니다.
1. 톱니바퀴를 직접 회전시킨다.
- 각 회차마다 회전시키는 톱니바퀴가 여기에 해당됩니다.
2. 옆 톱니바퀴에 의해서 회전된다.
- 인접한 톱니바퀴가 회전을 한다면 인접 부분의 극을 비교하여 회전 여부를 결정합니다.
- 인접 부분이 같은 극이면 현재 톱니바퀴를 회전시키지 않습니다.
- 인접 부분이 다른 극이면 인접한 톱니바퀴의 회전 방향과 반대의 방향으로 현재 톱니바퀴를 회전시킵니다.
위 규칙에 따라 구현한 코드는 아래와 같습니다.
전체 코드
제출 언어: Python3
시간: 72ms
import sys
def findRotatingGear(target, direction): # 회전 시킬 톱니바퀴를 찾는 함수
global gears
res = [0] * 4
res[target] = direction
# target을 기준으로 왼쪽 검사
for i in range(target-1, -1, -1):
if gears[i][2] == gears[i+1][6]:
break
res[i] = res[i+1] * -1
# target을 기준으로 오른쪽 검사
for i in range(target+1, 4):
if gears[i][6] == gears[i-1][2]:
break
res[i] = res[i-1] * -1
return res
def rotate(res): # 톱니바퀴를 회전 시키는 함수
global gears
for i in range(4):
if res[i] == 0: # 해당 톱니바퀴는 회전시키지 않는다.
continue
elif res[i] == 1: # 해당 톱니바퀴는 시계 방향으로 회전시킨다.
gears[i] = [gears[i][7]] + gears[i][0:7]
else: # 해당 톱니바퀴는 시계 반대 방향으로 회전시킨다.
gears[i] = gears[i][1:8] + [gears[i][0]]
if __name__ == "__main__":
gears = [ list(map(int, list(sys.stdin.readline().strip()))) for _ in range(4) ]
k = int(sys.stdin.readline().strip())
rotatingInfo = [ tuple(map(int, sys.stdin.readline().strip().split())) for _ in range(k) ]
for g, d in rotatingInfo:
res = findRotatingGear(g-1, d)
rotate(res)
score = gears[0][0] + gears[1][0] * 2 + gears[2][0] * 4 + gears[3][0] * 8
print(score)
읽어 주셔서 감사합니다 :)
틀린 부분이 있다면 댓글로 편히 알려주세요😊
'PS > Python' 카테고리의 다른 글
[Programmers] 행렬 테두리 회전하기(파이썬, Python) (0) | 2021.07.18 |
---|---|
[Programmers] 로또의 최고 순위와 최저 순위 (파이썬, Python) (0) | 2021.07.18 |
[백준] 2374 - 같은 수로 만들기 (파이썬, Python) (0) | 2021.07.06 |
[백준] 19238 - 스타트 택시 (파이썬, Python) (0) | 2021.06.13 |
[백준] 14500 - 테트로미노 (파이썬, Python) (2) | 2021.06.05 |