본문 바로가기
Backjoon

Backjoon problem 11866 요세푸스 문제 0 - python

by ddahu 2023. 5. 18.

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

 

11866번: 요세푸스 문제 0

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

www.acmicpc.net

 

 

  • 입력과 출력

  • 소스코드
from collections import deque

n,m = map(int,input().split())
deq = deque(i for i in range(1,n+1))
res = []
cnt = 0

while len(deq) != 0:
    popData = deq.popleft()
    cnt += 1

    if cnt % m == 0:
        res.append(popData)
    else:
        deq.append(popData)
print('<'+', '.join(map(str,res)) + '>')
  • 해설

이 문제는 데크 문제로 대표적이라고 할 수 있다.

 

데크는 리스트의 양쪽 모두 접근이 가능한 양방향 큐 라고 생각하면된다.

 

1 2 3 4 5 6 7 이라는 리스트가 있으면 맨 왼쪽 숫자를 꺼내어 cnt 를 센다

cnt 가 입력된 m 과 같아지면 출력 할 리스트에 새로 추가를 하고

아니라면 맨 왼쪽에 popleft 한 데이터를 다시 맨 오른쪽으로 다시 집어넣어서 순회하면 된다.