BOJ_1158 요세푸스 문제
- TOC {:toc}
이 글은 백준 온라인 저지의 1158번 문제를 파이썬(Python)으로 풀이한 것을 모아놓은 글입니다.
일종의 연습 기록이며 제가 정답을 받은 코드와 참고할만한 다른 코드를 같이 기록합니다. 필요한 경우 코드에 대한 해설을 기록합니다만 코드는 통과했어도 해설은 틀릴 수 있기 때문에 가볍게 참고해주시길 부탁드립니다. 피드백은 편하신 방법으로 자유롭게 주시면 감사하겠습니다.
2021.04.24
메모리 | 시간 | 코드 길이 |
---|---|---|
29284 KB | 72 ms | 222 B |
단계 | 시작 시각 | 끝난 시각 | 걸린 시간 |
---|---|---|---|
문제 이해 | 15:27:45 | 15:31:39 | |
풀이 생각 | 15:31:45 | 15:40:14 | |
코딩 | 15:40:16 | 16:19:00 |
import sys
input = sys.stdin.readline
N, K = map(int, input().split())
# 1부터 입력받은 수 `N`까지의 리스트를 먼저 만들고
q = [i for i in range(1, N + 1)]
y = []
i = 0
# 리스트의 원소를 K개씩 건너 순회하면서
while len(q):
i = (i + K - 1) % len(q)
# pop 시킨 원소를 차례로 리스트에 담는다.
y.append(q.pop(i))
# join()을 사용해 각 원소 사이를 `,`로 연결해 출력한다.
print(f'<{", ".join(map(str, y))}>')
아이디어 & 풀이
- 원소를 건너뛸 때 이전에 원소가
pop
되면서 인덱스가 하나씩 줄어들었기 때문에 현재 인덱스에K - 1
만큼 더해주고 - 인덱스가 현재 리스트의 크기보다 커질 수 있어서 현재 리스트의 크기
len(q)
으로 나눈 나머지를 입력해 주어야 한다.
-
ps-python