💡문제접근
- 고차원적인 알고리즘을 사용하지 않는 단순 구현 문제
- 지문의 길이에 당황한 것도 있지만 테스트케이스를 직접 그려가면서 했는데도 이해가 잘 안 가는 부분이 상당히 많았다. 실제로 이런 문제를 만났을 때 자신있게 풀 수 있을지도 모르겠다.
- 회전을 위해서 덱을 사용해야 한다는 점, 다른 일부분을 떠올리는 것까지는 성공했으나 구현하는 과정에서 진전이 없었고 결국 이 문제를 자력으로 해결하지 못했다.
- 1~4단계가 존재하는데 문제의 뉘앙스는 몇 번째 단계에서 멈추느냐를 묻는 것처럼 보이지만 실제 구하고자 하는 것은 1~4단계의 로테이션이 총 몇 번 돌았느냐를 구하는 것이었다.
💡코드(메모리 : 119684KB, 시간 : 1424ms, PyPy3로 제출)
from collections import deque
import sys
input = sys.stdin.readline
def solve(N, K, A):
res = 0
belt = deque([False] * N)
while True:
res += 1
A.rotate(1)
belt.rotate(1)
belt[N-1] = False
for i in range(N-2, -1, -1):
if A[i+1] > 0 and belt[i] and not belt[i+1]:
belt[i], belt[i+1] = False, True
A[i+1] -= 1
belt[N-1] = False
if A[0] > 0:
belt[0] = True
A[0] -= 1
if A.count(0) >= K:
break
return res
N, K = map(int, input().strip().split())
A = deque(map(int, input().strip().split()))
print(solve(N, K, A))
💡소요시간 : 2h ↑