이 문제를 풀기 위해 내가 생각한 알고리즘은 다음과 같다.
popleft
하고, 그 요소들을 append
한다.N = 7, k = 3이라면 1번부터 7번까지 사람 중 1번을 시작으로 3번째 순서에 있는 사람이 제거가 되고,
그 다음은 4부터 시작하여 다시 4를 기준으로 3번째 사람인 6이 제거가 된다.
K-1번째 까지의 사람들이 앞에서부터 제거가 된 후 다시 큐의 뒤로 돌아오며
K번째 사람은 완전히 제거가 되는 것이다.
from collections import deque
N, K = map(int, input().split())
que = deque([])
for i in range(1, N+1):
que.append(i)
print('<', end = '')
while que:
for i in range(K-1):
que.append(que.popleft())
print(que.popleft(), end='')
if que:
print(', ', end='')
print('>')
이 문제는 처음에 이해가 잘 안됐다.
m값이 의미하는 것이, 나열된 중요도에서 인쇄된 순서를 의미하는 줄 알고 한참 해맨거 같다..
코딩이 아닌 국어를 먼저 공부 해야할 것 같다.
문제에서 요구하는 바를 간략하게 설명하면 다음과 같다.
문제를 풀기 위해 내가 생각한 해결과정은 이렇다.
위 알고리즘으로 코드를 작성중에 문제가 생긴걸 깨달았는데,
m값은 몇 번째로 중요한 지가 아닌, 몇 번째로 인쇄되는 지 궁금한 문서의 index
이므로
내가 생각한 방법으로 접근하면 틀린 값이 나올 수 밖에 없다.
문제는 알았지만, 어떻게 적용해야 하는 지 막막하던 중
m번째 문서를 표시할 수 있는 인덱싱을 추가하여 작성한 알고리즘을 찾을 수 있었다.
t = int(input())
for _ in range(t):
n, m = list(map(int, input().split()))
important = list(map(int, input().split()))
idx = list(range(len(important)))
idx[m] = 'target'
order = 0
while True:
if important[0] == max(important):
order += 1
if idx[0] == 'target':
print(order)
break
else:
important.pop(0)
idx.pop(0)
else:
important.append(important.pop(0))
idx.append(idx.pop(0))
한 걸음 나아가는데 도움을 준 깔끔한 풀이 해설
[백준] 1966번 프린터 큐 파이썬 풀이 - Be Geeky
다음엔 내 힘으로 이겨내보자!