프로그래밍/백준

[파이썬(Python)] 백준 11866 요세푸스 문제 0

정정훈훈 2024. 7. 2. 19:17
반응형
728x90

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

백준 11866번 요세푸스 문제 0 | 실버 5

 

SMALL

코드

import sys

n, k = map(int, sys.stdin.readline().split())

nums = [i for i in range(1, n + 1)]
josephus = [0] * n

kill = k
del_num = k - 1
josephus[0] = nums[del_num]
nums.remove(kill)

for m in range(1, n):
    nums_length = len(nums)
    del_num += (k - 1)
    del_num %= nums_length
    josephus[m] = nums[del_num]
    nums.remove(nums[del_num])
    
print('<', end='')
for f in range(n - 1):
    print(josephus[f], end=', ')
print(josephus[-1], end = '')
print('>')

 

1. 첫 번째 숫자 : 리스트의 k-1번째 숫자는 무조건 0번째 요세푸스 숫자에 포함되므로 먼저 따로 처리해줍니다.

2. del_num은 입력된 리스트에서 삭제할 숫자의 인덱스입니다.

3. del_num에 k만큼 더하는데, 삭제 작업을 진행 중인 리스트(nums)의 길이를 k만큼 더한 값이 리스트의 길이(nums_length)를 넘는다면, 나머지 연산을 해줍니다.(★) -> 리스트의 길이가 넘어갈 경우 가장 작은 숫자로 다시 돌아가게끔 하는 코드입니다.

반응형

4. 삭제할 요소의 인덱스(del_num)와 k를 구분해야 합니다.

5. print('<'~ 이후 코드는 <요세푸스 숫자> 형태로 출력될 수 있게끔 만든 코드입니다.

 

반응형