본문 바로가기
백준

[백준] 11866번 : 요세푸스 문제 0 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 9. 18.
728x90
반응형

 

 

11866번: 요세푸스 문제 0

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

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

해당 문제는 원형으로 앉은 사람을 차례대로 제거하는 문제이다.

원형으로 앉아 있으므로 해당 순서가 되기 전까지는 제일 앞사람을 제일 뒤로 옮기고, 해당 순서가 되면 해당 사람을 제거한다. 이런 방식으로 마지막까지 사람을 제거한다.

 

  1. sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
  2. deque 자료구조를 사용하기 위해 deque 모듈을 불러온다. from collections import deque
  3. 사람 수와 제거할 순서를 입력받는다. N, K = map(int, sys.stdin.readline().split())
  4. 1번부터 사람 수만큼 들어있는 deque 자료를 생성한다. queue = deque(i for i in range(1, N + 1))
  5. 출력 형식에 따라 <를 출력하고 줄 바꿈 하지 않는다. print("<", end='')
  6. 사람이 1명 남을 때까지 반복하며 while (len(queue) > 1)
  7. 제거할 순서 전까지 있는 사람은 뒤로 보낸다. for i in range(K - 1): queue.append(queue.popleft())
  8. 제거할 순서의 사람을 제거하고 그 값을 출력한다. print(queue.popleft(), end=', ')
  9. 마지막 1명이 남았으면 마지막 사람을 출력하고 >를 출력한다. print(queue.popleft(), end='>')
반응형

3. 소스코드

import sys
from collections import deque

N, K = map(int, sys.stdin.readline().split())

queue = deque(i for i in range(1, N + 1))
print("<", end='')
while (len(queue) > 1):
    for i in range(K - 1):
        queue.append(queue.popleft())
    print(queue.popleft(), end=', ')

print(queue.popleft(), end='>')
728x90
반응형