반응형
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('<'~ 이후 코드는 <요세푸스 숫자> 형태로 출력될 수 있게끔 만든 코드입니다.
반응형
'프로그래밍 > 백준' 카테고리의 다른 글
[파이썬(Python)] 백준 1380 귀걸이 (0) | 2024.07.02 |
---|---|
[백준/파이썬] 1259 팰린드롬수(palindrome) 회문 판단하기 (0) | 2024.03.31 |
[백준/파이썬] 1978 소수 찾기 알고리즘 구현하기 (0) | 2024.03.31 |
[백준/파이썬] 1920 수 찾기 : 이진검색트리 말고 세트(집합)으로 풀기, 시간초과 나는 이유 (0) | 2024.03.31 |
[백준/파이썬] 1308번 D-Day (1) | 2024.03.31 |