Problem Solving/백준

[11866] 요세푸스 문제 0

충무로술겜마 2021. 7. 25. 20:33

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

 

11866번: 요세푸스 문제 0

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)

www.acmicpc.net

요세푸스 문제 0는 

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

 

1158번: 요세푸스 문제

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)

www.acmicpc.net

1158번 요세푸스 문제와 내용은 동일합니다. 1158번은 메모리 제한이 256메가, 입력 조건이 5000까지라는 차이점이 존재하는데,

solved.ac 상으로는 어쨌거나 11866번이 실버 4고 1158번이 실버 5네요.

 

저는 단순한 큐 문제라고 생각을 했고, 직관적으로 생각했을 때 사람이 생각하는 것과 가장 비슷하게 구현했습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
n, k = map(int, input().split())
 
queue = []
result = []
cursor = -1
for i in range(n):
    queue.append(i + 1)
 
while queue:
    for _ in range(k):
        cursor += 1
        if cursor > len(queue) - 1:
            cursor = 0
    result.append(queue[cursor])
    queue.pop(cursor)
    cursor -= 1
 
print("<", end='')
for i in range(n):
    if i == n - 1:
        print(str(result[i])+'>')
    else:
        print(str(result[i]) + ", ", end='')
 
cs

궁금해서 1158번도 다시 제출해봤는데, 두 문제 다 정답을 받았습니다 ^^