- 문제 : https://www.acmicpc.net/problem/1158
Silver Lv4 문제이고, 스스로 푼 문제다!
어렵지 않은 문제였지만 문제 이해부터 정답 출력까지 실수를 많이해서 그 과정을 기록 해보려 한다.
1. 문제 이해
처음에는 매번 k번째에 있는 사람을 빼야하는 줄 알았는데, 정답을 보니 이해한 내용은 아래와 같다.
원 순열에서 k번째 있는 원소를 제거하는데, 제거한 뒤 다음 사람을 뺄 때는 이전 순서에서 남은 사람 중 k번째 사람을 빼는 것이었다.
이거를 매번 인덱스나 남은 원소를 고려하면서 진행해야 싶었는데 생각해보니 큐로 하면 간단하게 해결되는 문제였다.
2. <1,2,3,5> 출력
리스트를 출력하면 [1,2,3,4,5] 이런식으로 출력이 되기 때문에 일일히 인덱스 별로 분기문 나눠서 출력해야했다.
3. 시간초과
queue.pop(0)으로 풀었을 때는 4%에서 시간초과가 발생했다. 그래서 queue를 리스트가 아닌 deque()로 변경했더니 무사히 통과했다.
- 정답 풀이 :
from collections import deque
n, k = map(int, input().split())
answer = ['<']
queue = deque([i for i in range(1, n + 1)])
sequence = 1
while queue:
x = queue.popleft()
if sequence < k:
queue.append(x)
sequence += 1
elif sequence == k:
answer.append(x)
sequence = 1
for i in range(n + 1):
if i == 0:
print(answer[i], end = '')
elif i == n:
print(answer[i], end = '')
else:
print(answer[i], end = ', ')
print('>')
'백준' 카테고리의 다른 글
[문자열/백준] 1515번 : 수 이어 쓰기 (0) | 2023.06.12 |
---|---|
[누적합/백준] 2167번 : 2차원 배열의 합 (0) | 2023.05.09 |
[누적합/백준] 2015번 : 수들의 합 4 (0) | 2023.05.09 |
[/백준] 14425번 : 문자열 집합 (0) | 2023.01.06 |
[백준/Stack] 1874번 : 스택 수열 (0) | 2022.12.15 |