[파이썬/python] 백준 11866번 : 요세푸스 문제 0 (🥈5)

n,k = map(int,input().split())
aa = [i for i in range(1,n+1)]

k -= 1
cnt = k
ans = "<"

while True:
    ans += str(aa.pop(cnt)) + ", "
    cnt += k
    if len(aa) == 0:
        break
    if cnt >= len(aa):
        cnt %= len(aa)
        
print(ans[:-2] + ">")

배열에서 삭제되는 인덱스는 k-1의 배수가 된다.

인덱스가 배열의 길이와 같거나 더 커지면 인덱스 % 배열의 길이로 나머지를 구해주어 다시 삭제 될 인덱스를 구해주었다.

 

정석 풀이는 이렇게 풀어야 하는 것 같다.

from collections import deque

n,k = map(int,input().split())

qq = deque([i for i in range(1,n+1)])
answer = []


while qq:
    for i in range(k-1):
        qq.append(qq.popleft())
    answer.append(qq.popleft())

print("<", end="")
print(", ".join(map(str, answer)), end="")
print(">")

k-1번만큼 popleft해주고 다시 append로 큐의 맨 뒤에 삽입을 반복하면 삭제해야 할 숫자가 큐의 0번째 인덱스로 옴

다시 popleft해주고 answer에 넣어 줌

comment