이거 솔직히 풀기 너무나 싫었다. 큐가 왜 어려운지 참.....그래도 정답비율이 55%로 상당히 높길래 안 풀수가 없었다....ㅎ
문제를 간단히 요약하자면 큐형태의 프린터 소프트웨어가 있는데 우선순위대로 처리하도록 만드는 소프트웨어이다.
따라서 우선순위에 따라 처리할 경우 처음에 뽑고자 했던 작업이 몇번째에서 뽑히는지를 알아내는 문제이다.
[1 2 3 4] 인경우 3번째인 우선순위 3 작업이 언제 되는지 알고싶다.
우선 4를 먼저 수행하기 위해 다른 값들을 뒤로 미룬다.
[4 1 2 3] 으로 변경되고 4를 처리한다.
[1 2 3] 으로 변경된다. 그럼 이제 우선순위가 높은 3을 출력하기 위해 앞의 작업을 뒤로 미룬다.
[3 1 2] 로 변경되고 3을 출력한다. 그럼 2번째에 출력되는 것이다.
이걸 코드로 짜면 아래와 같다.
from collections import deque
case = int(input())
for i in range(case):
n,m = map(int,input().split())
q = deque(input().split())
count = 0
while 1:
# max 찾기
mi = q.index(max(q))
print(q)
if mi == m:
break
for i in range(mi):
q.append(q.popleft())# 앞에 있는놈 뒤로 미룸
l = len(q)
if m < mi:
m += l-mi
else:
m -= mi
count+=1
q.popleft()
m -= 1
print(count+1)
여기서 수고로웠던 부분이 우선순위가 동일한 경우이다. 우선순위가 동일하면 어떤놈이 어떤거였는지 헷갈린다. 그래서 처음에 선택한 작업을 따라가도록 인덱스를 핸들링하는게 은근히 귀찮았다.
다른 고수분의 코드를 보니 그냥 하나씩 미뤄버리면서 인덱스를 1증가 1감소 하는 방식으로 코드를 짰다.
나도 차라리 그렇게 할껄.....
'알고리즘' 카테고리의 다른 글
백준 2630 풀이 (색종이 만들기, 쿼드트리, 분할정복, 파이썬) (0) | 2021.03.12 |
---|---|
백준 5430 풀이 (AC, 큐, 파이썬) (0) | 2021.03.11 |
백준 11866 풀이 (요세푸스 문제 0, 큐) (0) | 2021.03.10 |
백준 2164 파이썬 풀이 (카드2, 큐) (0) | 2021.03.09 |
백준 18258 파이썬 풀이 (큐 2, deque) (0) | 2021.03.09 |