백준 문제 풀이/스택, 큐, 덱

11866 요세푸스 문제 0 (python)

한사공사 2024. 6. 27. 17:33

문제

 

Deque 사용

import sys
from collections import deque
n, k = map(int, input().split())
deq = deque([i for i in range(1, n+1)])
res = []
while len(deq) != 0:
    for _ in range(k-1):
        # k-1번째 노드까지 deq 맨 뒤로 이동
        deq.append(deq.popleft())
    # k번째 노드 삭제 후 결과 배열에 추가
    res.append(str(deq.popleft()))
 
print('<'+', '.join(res)+'>')

 

리스트 사용

import sys

input = sys.stdin.readline

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

# 원형 큐 역할 리스트 생성
arr = list(range(1, n+1))
result = [] # 제거된 사람들 순서 저장 리스트

# 요네푸스 순열 계산
idx = 0 # 현재 제거할 사람 인덱스
while (len(arr) != 0): # 사람이 남아 있는 동안 반복
    idx += (k-1)
    # 원형 리스트 구현 위해 인덱스를 리스트 길이로 나눈 나머지로 사용
    idx = idx % len(arr)
    # 사람 제거한 뒤 result에 추가
    result.append(arr.pop(idx))

print("<", end="")
for i in range(n-1):
    print(result[i], end=", ")
print(result[n-1], end="")
print(">", end="")