알고리즘/백준 문제풀이

[백준] 11866 요세푸스 문제 0 파이썬 풀이 (큐, 덱)

자바칩 프라푸치노 2021. 6. 22. 16:31

 

코드

from collections import deque

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

stack = deque([i for i in range(1, n+1)])
print("<", end="")
while len(stack) != 1:
    for _ in range(k-1):
        stack.append(stack.popleft())

    print(stack.popleft(), end=", ")
print(f"{stack.popleft()}>")

 

 

 

풀이

 

원래 이해가 안됐던 점은

만약에 7 7 이 입력되면

7번째 사람이 죽고 6명 남으면 어떡하지? 라고 생각했는데

그러면 계속 돌면서 7번째 사람을 죽이는 것이다

예를 들어 1 2 3 4 5 6 사람이 있으면 여기서 7번째는 1번이다

 

stack에 1부터 n번호까지 사람을 넣고

k번째 사람이 맨 왼쪽에 올때까지 stack에 맨 앞에 원소를 꺼내서 맨 뒤에 넣는다

7명이고 3번째 사람을 죽인다고 치면

1 2 3 4 5 6 7 에서

2 3 4 5 6 7 1 을 만들고

3 4 5 6 7 1 2 를 만들어서

맨 앞의 3을 없애면서 print를 한다

이렇게 계속 반복한다.

 

728x90