1번 문제.
https://www.acmicpc.net/problem/1158
-> 요세푸스 문제
7개의 수 중에서 3번째 수를 계속해서 없애서 나오는것을 그림으로 아래와 같이 표현했다.
import sys
# n과 k 값을 각각 입력 받는다.
n, k = map(int, sys.stdin.readline().split())
# 처음 원에 정렬을 위한 리스트
nums = []
for i in range(n):
nums.append(i+1)
# nums[]에서 제거될 k번째 숫자를 초기화
numIdx = 0
# 요세푸스 정렬을 위한 리스트
josephus = []
# nums[]리스트에서 하나씩 제거할 예정이므로, 길이가 남아 있을때까지 계속 진행될 반복문
while len(nums):
# 0 1 2 3 4 5 6
# [1, 2, 3, 4, 5, 6, 7] -> 2 제거되는 값 numIdx = k-1 => numIdx = 3-1 = 2 % 7 = 2
# [1, 2, 4, 5, 6, 7] -> 4 => numIdx = 2+3-1 = 4 % 6 = 4
# [1, 2, 4, 5, 7] -> 1 => numIdx = 4+3-1 = 6 % 5 = 1
# [1, 4, 5, 7] -> 3 => numIdx = 1+3-1 = 3 % 4 = 3
# [1, 4, 5] -> 2 => numIdx = 3+3-1 = 5 % 3 = 2
# [1, 4] -> 0 => numIdx = 2+3-1 = 4 % 2 = 0
# [4] -> 0 => numIdx = 0+3-1 = 2 % 1 = 0
numIdx = (numIdx + k - 1) % len(nums)
# k번째 숫자를 제거하기
removedNum = nums.pop(numIdx)
# 제거한 숫자를 받아와 요세푸스에 넣기
# 문자열로 받아오지 않으면 <3, 6, 2, 7, 5, 1, 4> 이런 꺽새와 같이 나오지 않으므로 str 캐스팅
josephus.append(str(removedNum))
# '%s 문자열' % '구분자'.join(리스트)
print('<%s>' % ', '.join(josephus))
===============================================