취준/코딩테스트

백준 11866 (python): 요세푸스 문제 0

린구 2024. 6. 24. 15:18
반응형
from collections import deque

N, K = map(int, input().split())
people = deque([])
answer = []
for i in range(1, N+1):
    people.append(str(i))

while people:
    for _ in range(K-1):
        people.append(people.popleft())
    answer.append(people.popleft())
    
print("<" + ", ".join(answer) + ">")

 

# for문 돌릴 필요 없이 하는 법
people = deque([i for i in range(1, n+1)])

 

예전에 알았었는데! 까먹었다

 

 

규칙 찾는 건 재밌어

 

예제를 보면

7, 3 입력 시 <3, 6, 2, 7, 5, 1, 4> 가 나와야 한다

1 2 3 4 5 6 7 이면 1 2 는 건너띄고 3 제거

 

그 다음 단계에선 3 다음 숫자부터 시작하므로

4 5 6 7 1 2 니까 4 5 건너띄고 6 제거

이런 식으로 진행된다.

 

처음 형태를 원 형태 대신 덱 형태의 1 2 3 4 5 6 7 이라고 가정하면

1 2 를 덱의 뒤에 추가하고(popleft 후 append) 3을 제거(popleft)하면

4 5 6 7 1 2 즉, 다음 단계 형태가 된다!

 

규칙은 결국

K-1 개의 숫자를 덱의 뒷부분으로 넘겨준 뒤 맨 앞의 숫자를 정답 리스트에 추가하는 것 !!

 

 

 

반응형