[백준] 프린터 큐_1966번

손시연·2022년 5월 1일
0

algorithm

목록 보기
16/18

프린터 큐_1966번

코드

import sys
from collections import deque
input = sys.stdin.readline
deq = deque()


t = int(input())
for _ in range(t):
    answer = 0
    n, m = map(int, input().split())  # m : index
    deq = deque(map(int, input().split()))
    while deq:
        if deq[0] == max(deq):
            deq.popleft()
            answer += 1
            if not m:  # m==0
                print(answer)
                break
        else:
            deq.rotate(-1)
        if m:  # m!=0
            m -= 1
        else:
            m = len(deq)-1

풀이노트

  • input :
    • n : 문서의 개수, m : 궁금한 것(index 가 입력되기 때문에 0부터 시작)
    • deq : 문서의 중요도
  • queue 문제에서는 성능이 우수한 deque 를 사용함
  • if deq[0] == max(deq) : {} else {}
    • 중요도에 따라 deq 를 돌리거나 deq[0]을 뽑음
    • if : 중요도가 가장 높은 것이 deq[0] 에 있을 경우
      • deq 에서 뽑고, answer++
      • if not m : m==0 인 경우 문제에서 정답이 출력되므로 더이상 while문을 돌릴 필요가 없으므로 break 함
    • else : deq.append(deq.popleft()) == deq.rotate(-1)
  • if m : {} else : {}
    • m 의 값을 변경하는 것
    • 문제에서 요구하는 것은 m 위치에 있는 값이 몇번째에 뽑히는가이므로, deq가 재배치될 때마다 m의 값은 변경됨.
    • m이 -1이 되면 안되므로 else 문을 추가함

소요시간 : 30분

  • 6개월 전에 풀었다가 실패한 코드가 있는데, 6개월 사이에 실력이 향상된 것 같아 뿌듯하다!
profile
Server Engineer

0개의 댓글