[백준] 1158: 요세푸스 문제

2400·2024년 12월 30일

백준

목록 보기
17/17
post-thumbnail


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

처음에 <> 이 형식에 맞춰서 안썼다가 틀림

n, k = map(int, input().split())

listk = [i + 1 for i in range(n)]
resultList = []
index = 0

for i in range(n):
    index = (index + k - 1) % len(listk)
    resultList.append(listk.pop(index)) 

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

인덱스로 찾아서 해당 인덱스를 찾아 pop하고 resultList에 추가했다.

index를 구하는게 포인트인데 k = 3일때 리스트에서는 3이 인덱스로 들어가면 세 번째가 아닌 4번째를 택한다. 따라서 k-1를 해줘야 인덱스 2 => 3번째가 됨

7, 3을 넣었을 때

순서대로 실행하면
index = (0 + 3 - 1) % 7 >>> 2
index = (2 + 3 - 1) % 6 >>> 4
index = (4 + 3 - 1) % 5 >>> 1
index = (1 + 3 - 1) % 4 >>> 3
index = (3 + 3 - 1) % 3 >>> 2
index = (2 + 3 - 1) % 2 >>> 0
index = (0 + 3 - 1) % 1 >>> 0

이 문제의 주인공 요세푸스는 전쟁에 참전해서 포위됐을때 집단 자살을 하려다가 쉽지않아서 서로 죽여주는 계획을 짰는데 요세푸스<<< 얘는 그냥 지 혼자 살려고 이 순간에 알고리즘 짜서 마지막에 혼자 살아남음 ㅇㅇ.. 뇌지컬이 죽여주는 사람으로 마지막에 살아서 혼자 항복함 ㅋㅋ..

해당 문제의 index를 구하는 건 외워두면 좋을 것 같다.

profile
시즌 2의 공부기록 - Artificial Intelligence & AeroSpace

0개의 댓글