[백준 1966번] 프린터 큐

eunseo kim 👩‍💻·2021년 1월 1일
0

👊 문제 풀기

목록 보기
2/17

📌 문제

👊 백준 1966번 - 프린터 큐


📌 개념

queue list

  • queue : 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 자료구조이다. FIFO(First in First out) 방식으로 스택과 꺼내는 순서가 반대이다.
  • 파이썬에서는 queue 라이브러리를 활용하여 queue를 구현할 수 있다.
  • 그러나 본 문제에서는 list를 queue처럼 사용하여 구현하였다.

📌 문제 해결

  • 현재 queue(list)에서 가장 큰 수가 맨 앞에 올 때까지 회전시켜 pop 한다.
  • 단, 맨 앞에 온 가장 큰 수가 내가 구하고자 하는 원소일 경우 프로그램을 종료한다.
  • 중요도가 같은 문서가 여러 개 있을 수도 있으므로 enumerate를 활용하여 index 값을 기억한다.
  • 파이썬에서 list의 맨 앞 원소를 뽑으려면 list.pop(0)처럼 index를 0으로 설정한다.

Code

test_case = int(input())

for _ in range(test_case):
    n, m = list(map(int, input().split(" ")))
    queue = list(map(int, input().split(" ")))
    queue = [(i, idx) for idx, i in enumerate(queue)]

    count = 0
    while True:
        if queue[0][0] == max(queue, key=lambda x: x[0])[0]:
            count += 1
            if queue[0][1] == m:
                print(count)
                break
            else:
                queue.pop(0)
        else:
            queue.append(queue.pop(0))

📌 else

  • enumerate : 순서가 있는 자료형의 index번호 와 index값을 반환하는 함수이다.
  • max(iterable, key = lambda 매개변수 : 식) : iterable의 max값을 구한다. 단, 조건은 lambda 표현식에 정의된 함수식에 의해 정해진다.
  • queue.pop(0) : N이 0이면 맨 앞의 원소를 뺀다.
profile
열심히💨 (알고리즘 블로그)

0개의 댓글