CS/코딩 테스트
[알고리즘][파이썬] 백준_1158_요세푸스 문제
DandyNow
2022. 1. 5. 10:57
728x90
반응형
"1158번: 요세푸스 문제" 파이썬 풀이
https://www.acmicpc.net/problem/1158
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
1번 부터 N명의 사람이 원을 이루며 앉아있고,
K번째 사람을 한 사람씩 제거한다.
제거된 순서를 예제와 같은 형태로 출력하면 된다.
while문 사용
# while문 사용(결과: 맞았습니다!)
N, K = map(int, input().split())
cir = [i for i in range(1, N+1)]
rm = []
i = K - 1
while cir:
if i > len(cir) - 1:
i = i % len(cir)
else:
rm.append(str(cir.pop(i))) # join을 사용하기 위해서 값을 문자열로 append
i += K - 1
print('<'+', '.join(rm)+'>')
cir(circle) 리스트의 값이 pop 되어 빈 리스트가 될 때까지 반복하였다.
이 문제에서 핵심은 i(index)에 해당하는 cir 리스트의 값을 pop 할때,
i 가 리스트의 범위를 벗어 날 경우에 대한 처리이다.
i 를 cir 리스트의 길이(len(cir))로 나눈 나머지가 i 가 되게하여 처리하였다.
"IndexError: list index out of range"
로 애먹었던 문제다!
728x90
반응형