[백준 11866번 - Python 파이썬] 요세푸스

wonyoung Song·2021년 11월 22일
0

알고리즘

목록 보기
6/7

백준 11866번 - 요세푸스

Solution

  • 조건 : 1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다.
    이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다

문제를 보자마자 append와 pop을 이용하여 해결할 수 있다고 생각했지만
rotate로 간단하게 풀 수도 있을 것 같아서 rotate를 이용하였다.

문제를 해결하고 찾아보니 list를 이용한 풀이가 더 시간이 짧게 나오는 듯 하다.

N번 동안 K번째 수 전까지는 rotate를, K번째 수는 pop하여 새로 만든 list에 append 하여
결과 list를 만들고 출력조건에 맞게 출력한다.

Code

from collections import deque

N, K = map(int,input().split())
deq = deque(i + 1 for i in range(N))
result = []

for i in range(N):
  deq.rotate(-K + 1)
  result.append(deq.popleft())

print('<',end="")
print(*result,sep=', ',end="")
print('>')

Feedback
출력조건 때문에 고민을 많이 했었다.
print의 기능을 더욱 숙지해야 할 듯.

profile
네. 송원영입니다.

0개의 댓글