[Baekjoon] 1158번: 요세푸스 문제(구현 Silver4) - Python

꼬마요리사레미·2023년 7월 31일

Algorithm

목록 보기
36/41

1. 문제

요세푸스 문제

2. 코드

N, K = map(int, input().split())
circle_q = [ i for i in range(1, N+1)]
result = []

index = 0
while circle_q:
  index = (index + (K-1)) % len(circle_q)
  result.append(circle_q.pop(index))

print("<" + ", ".join(map(str, result)) + ">") 

3. 로직

초기 설정.

N, K = map(int, input().split())
circle_q = [i for i in range(1, N+1)]
result = []

원에 앉아있는 사람들을 나타내는 circle_q 리스트와 제거된 순서를 저장할 result 리스트를 초기화한다.

제거 과정을 구현한다.

index = 0
while circle_q:
  index = (index + (K-1)) % len(circle_q)
  result.append(circle_q.pop(index))
  1. circle_q 리스트는 원을 이루며 앉아있는 사람들을 나타낸다.
  2. circle_q 리스트의 모든 사람이 제거될 때까지 다음과 같은 과정을 반복한다.
  • index 변수를 통해 리스트에서 다음으로 제거해야 할 사람의 위치를 결정한다.

    • index는 제거를 진행하기 위한 시작 위치를 나타낸다.
    • (K-1)은 제거 과정에서의 간격을 나타낸다.
    • 나머지 연산자 %는 인덱스가 원을 한 바퀴 돌 때마다 다시 시작되도록 한다.
  • 계산된 인덱스에 위치한 사람을 circle_q 리스트에서 제거하고, 이를 result 리스트에 추가한다.

제거된 사람들의 순서를 출력한다.

print("<" + ", ".join(map(str, result)) + ">") 

result 리스트의 정수들을 문자열로 변환한다. 문자열들을 쉼표와 공백으로 이어붙인다.

0개의 댓글