
💡 해결 방법
- 인덱스와 배열에 원소가 제거됐을 때 뒤에 요소들 앞으로 한 칸씩 당겨지는 것 생각해서 point가 건너뛰는 범위를 k-1로 지정
- point가 len(circle)을 넘어가면 안되므로 중간에 while문으로 point 변경해줌
- 제거할 요소의 인덱스에 도달하면 result에 추가하고 circle에서는 remove
- deque 사용하면, k만큼 반복해서 pop하고 그걸 다시 뒤에 추가해준다. 그리고 맨 앞의 요소를 print한다. 이 과정을 deque가 비었을 때 break하면 더 간단하게 해결 가능
🖥️ 코드
import sys
N, K = map(int, sys.stdin.readline().split())
circle = []
result = []
for i in range(1, N+1, 1):
circle.append(i)
point = 0
while circle:
point += K-1
while point >= len(circle):
point -= len(circle)
result.append(circle[point])
circle.remove(circle[point])
print("<", end="")
for i in range(len(result)):
if i == len(result)-1:
print(result[i], end="")
else:
print(result[i], end=", ")
print(">")
🖥️ 정답코드
import sys
from collections import deque
n, k = map(int, sys.stdin.readline().split())
s = deque([])
for i in range(1, n + 1):
s.append(i)
print('<', end='')
while s:
for i in range(k - 1):
s.append(s[0])
s.popleft()
print(s.popleft(), end='')
if s:
print(', ', end='')
print('>')
✏️ 알고리즘 분류