[BOJ] #1158: 요세푸스 문제 (Python)

2024. 3. 25. 22:45·코딩테스트

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

 

1158번: 요세푸스 문제

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

www.acmicpc.net

문제

N명의 사람이 원을 이루면서 앉아있는 상태에서, 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 또 K번째 사람을 제거한다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다.

원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다.

입력

N: 원을 이루는 사람의 수

K: 제거되는 사람의 순서

출력

요세푸스 순열

제약

1 <= K <= N <= 5,000

예제

예제

7명의 사람이 원을 이루면서 앉아있는 상태에서, 7명의 사람이 모두 제거될 때까지 3번째 사람을 계속 제거해야 한다.

그림에서 노란색은 루프마다 제거되는 사람의 위치를 표시한 것이다.

1) N = [1, 2, 3, 4, 5, 6, 7] -> 3번째인 3이 제거된다.

2) N = [1, 2, 4, 5, 6, 7] -> 3이 제거된 후, 3번째가 6이므로, 6이 제거된다.

3) N = [1, 2, 4, 5, 7] -> 6이 제거된 후, 3번째가 2이므로, 2가 제거된다.

...

위와 같은 과정은 7명이 모두 제거될 때까지 반복되고, 결과적으로 요세푸스 순열이 <3, 6, 2, 7, 5, 1, 4>로 출력된다.

코드

"""
Input: N(인원 수), K(제거하는 사람 순서)
Output: 요세푸스 순열(원에서 사람들이 제거되는 순서)
Constraints: 1 <= K <= N <= 5,000

시간 복잡도
while 루프 -> O(n)
for 루프 -> O(k-1)
-> 총 연산 횟수 n*(k-1) -> O(n*k) -> O(N)
공간 복잡도: queue, answer의 크기 = n -> O(N)
"""
from collections import deque
n, k = map(int, input().split())
queue = deque(range(1, n + 1))
answer = []

while queue: # queue에 요소가 남아있는 동안 계속된다. O(n)
    for _ in range(k-1): # O(k-1)
        queue.append(queue.popleft())
    answer.append(queue.popleft())
# 총 연산 횟수 n*(k-1) -> O(n*k) -> O(N)

print(str(answer).replace('[', '<').replace(']', '>'))

 


 

참고 자료

https://kau-algorithm.tistory.com/641

저작자표시 (새창열림)
'코딩테스트' 카테고리의 다른 글
  • [BOJ] #1316: 그룹 단어 체커 (Python)
  • [BOJ] #4673: 셀프 넘버 (Python)
  • [BOJ] #10828: 스택 (Python)
dawncoding
dawncoding
  • dawncoding
    새벽 코딩
    dawncoding
  • 전체
    오늘
    어제
    • 분류 전체보기 (27)
      • Frontend (7)
        • Javascript (6)
      • Backend (5)
        • AWS (3)
        • Node.js (1)
        • SQL (1)
      • Github (1)
      • Computer Engineering (1)
      • 코딩테스트 (4)
      • Mac에서 개발환경 설정하기 (2)
      • 포스코X코딩온 부트캠프 (7)
      • 끄적끄적 (0)
  • 인기 글

  • 태그

    EC2
    포스코X코딩온 웹 풀스택 부트캠프
    회고
    mysql
    CSS
    공부
    코딩테스트
    Git
    브라우저 동작 방법
    AWS
    python
    slackbot
    BOJ
    CS 스터디
    부트캠프
    오블완
    javascript
    티스토리챌린지
    Node.js
    next.js
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dawncoding
[BOJ] #1158: 요세푸스 문제 (Python)
상단으로

티스토리툴바