문제 링크
https://www.acmicpc.net/problem/1158
K가 3이란 뜻은 3번째 사람마다 죽여야한다는 의미다. 이를 위해서는 주기가 2가 되어야한다. 그래서 사람 한 명을 죽일 때마다 ‘없애야하는 인덱스’를 2씩 더해주어야한다. 하지만 없애야하는 인덱스보다 남은 사람 수가 적다면 문제가 생긴다.
‘2씩 더한 결과로 생기는 없애야하는 인덱스’와 ‘파란색으로 표시한 요세푸스 순열의 규칙에 따른 없애야하는 인덱스’를 비교해보면, (남은 사람 수 % 2씩 더한 결과로 생기는 없애야하는 인덱스 = 파란색으로 표시한 없애야하는 인덱스)가 된다. (ex. 5 % 6 = 1)
정답 코드
import sys
N, K = map(int,sys.stdin.readline().split())
list = []
result = []
num = 0
for i in range(1,N+1):
list.append(i)
for i in range(N):
num += K-1
if num >= len(list):
num = num % len(list)
result.append(str(list.pop(num)))
print("<",", ".join(result)[:],">",sep='')
728x90
'파이썬 알고리즘 문제 풀이' 카테고리의 다른 글
Baekjoon Online Judge 2609번 파이썬 (0) | 2022.07.04 |
---|---|
Baekjoon Online Judge 10430번 파이썬 (0) | 2022.06.29 |
Baekjoon Online Judge 1406번 파이썬 (0) | 2022.06.28 |
Baekjoon Online Judge 11656번 파이썬 (0) | 2022.06.27 |
BaekJoon Online Judge 10824번 파이썬 (0) | 2022.06.24 |