본문 바로가기
백준

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

by 우당탕탕 개발자 2023. 8. 12.
728x90
반응형

 

 

1158번: 요세푸스 문제

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

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

  1. sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
  2. popleft() 함수를 사용하기 위해 deque 자료구조를 활용했고, deque 자료구조를 사용하기 위해 deque 모듈을 불러온다. from collections import deque
  3. 인원 수와 제거할 위치를 입력받는다. N, K = map(int, sys.stdin.readline().split())
  4. 1번부터 인원수만큼 번호를 deque 자료로 생성한다. queue = deque(list(i for i in range(1,  N + 1)))
  5. 처음 <를 출력해 주고 줄 바꿈 하지 않는다. print("<", end='')
  6. 모든 사람이 제거될 때까지 반복하며 while (queue)
  7. 제거할 위치 이전까지 앞사람들을 모두 제일 뒤로 보낸다. for _ in range(K - 1): queue.append(queue.popleft())
  8. 만약 현재 사람이 제거되는 마지막 사람이 아니라면 if (len(queue) > 1)
  9. 제거되는 사람을 출력하고 줄 바꿈 대신 ,(콤마)와 공백을 출력한다. print(queue.popleft(), end=', ')
  10. 반면에 현재 사람이 제거되는 마지막 사람이라면 else
  11. 제거되는 사람을 출력하고 줄 바꿈 대신 >를 출력한다. print(queue.popleft(), end='>')
반응형

3. 소스코드

import sys
from collections import deque

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

queue = deque(list(i for i in range(1, N + 1)))

print("<", end='')
while (queue):
    for _ in range(K - 1):
        queue.append(queue.popleft())

    if (len(queue) > 1):
        print(queue.popleft(), end=', ')
    else:
        print(queue.popleft(), end='>')
728x90
반응형