Post

[BOJ] 11866. 요세푸스 문제 0(python)

📌문제

Alt text

💪아이디어

  1. 원만들기
    queue로 맨 앞 요소를 빼고 다시 queue의 뒤에 붙이는 식으로 순환하도록 한다.

  2. k번째 요소 빼기
    숫자를 빼면서 몇 번째인지 확인하고 k번째의 숫자라면 그 숫자는 queue 뒤에 붙이지 않고 요세푸스 수열의 요소에 넣는다. 그리고 다시 k번째부터 세기 위해서 초기화해준다.

  3. 순환
    요세푸스 수열에는 모든 요소가 들어있어야 하기 떄문에 queue가 비었다면 순환을 멈추게 한다.

  4. 요세푸스 수열 출력
    < 수열 숫자 , , ... ,>의 형식으로 출력되어야한다. 요세푸스 수열요소들을 출력하기 위해서 ', '.join을 사용한다. join의 매개변수로는 str타입이기 때문에 int을 str으로 변환한다.

🥂코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from collections import deque
answer=[]

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

cnt = k
while queue:
    cnt-=1
    queue.append(queue.popleft())
    if cnt==0: 
        cnt = k
        answer.append(queue.pop())

print('<'+', '.join(map(str,answer))+'>')
This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.