python/알고리즘 문제풀이

[백준 | 파이썬3] 11866. 요세푸스 문제 0 - 큐

빛날희- 2021. 8. 4. 16:51

https://www.acmicpc.net/problem/11866

 

11866번: 요세푸스 문제 0

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)

www.acmicpc.net

> 큐 활용

다음 그림은 문제에 나와있는 예시를 대상으로 생각한 아이디어를 그려본 것이다. 

 1번에서 k-1번, 즉 시작 번호에서 두 번 이동해야하는데 이동하면서 거쳐가는 숫자들은 모두 뒤로 빼준다(<- popleft와 append 활용). 두 번 이동한 후 가장 첫번째에 나와있는 숫자를 결과 리스트에 추가해준다. 리스트에 추가한 후 3을 큐에서 빼주면(<-popleft 활용) 4에서부터 다시 2번 이동하고 이동하면서 4와 5는 뒤로 빼준다. 그럼 6번이 가장 앞으로 나오고 해당 번호를 결과 리스트에 추가한 후 큐에서 빼준다. 

 

위의 과정을 큐에 모든 원소가 없어질 때 까지 반복한다. 이 과정을 코드로 구현하면 다음과 같다.