본문 바로가기
백준

[백준] 11866번 파이썬 (요세푸스 문제 0)

by 헤이즐넛 좋아하는 개발자 2024. 3. 18.

1. 문제와 예제

문제
예제

 


2. 코드

import sys
input = sys.stdin.readline

# 입력 받기
N, K = map(int, input().split())

# ex. N = 7 -> queue = [1, 2, 3, 4, 5, 6, 7]
queue = [(i+1) for i in range(N)]
res = []

i = 0
while queue:
    i += (K-1)
    while (i >= len(queue)):
        i -= len(queue)
    res.append(str(queue.pop(i)))

# 결과 출력
print('<' + ', '.join(res) + '>')

3. 풀이

생각 과정

예제를 통해 생각 과정을 적고 코드로 구현했다.


4. 추가

찾아보니 deque를 활용해서 푸는 방법도 있었다. 아래 게시글을 참고했다.

https://develop247.tistory.com/358

 

[파이썬/Python] 백준 11866번 요세푸스 문제 0

[파이썬/Python] 백준 11866번 요세푸스 문제 0 11866번: 요세푸스 문제 0 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000) www.acmicpc.net 문제 요세푸스 문제는 다음과 같다

develop247.tistory.com

from collections import deque
import sys
input = sys.stdin.readline

# 입력 받기
N, K = map(int, input().split())

deq = deque([(i+1) for i in range(N)])
res = []

while deq:
    # K-1번째 노드까지 deq 맨 뒤로 이동시킴
    for _ in range(K-1):
        deq.append(deq.popleft())
    # K번째 노드 삭제 후 res에 추가
    res.append(str(deq.popleft()))

# 결과 출력
print('<' + ', '.join(res) + '>')