[백준] 1966. 프린터 큐

채연·2023년 1월 8일
0

baekjoon

목록 보기
5/26

1996. 프린터 큐

문제 링크


📖 문제 설명

  • 프린터를 해야하는 문서들이 여러 개 있다.
  • 그 문서들은 각각 자신의 순위를 가지고 있고, 다른 문서들 중에서 순위가 가장 높아야지만 자신이 출력될 수 있다.
  • 가장 높지 않으면, 줄의 젤 뒷쪽으로 쫓겨나고 그 다음 문서가 비교되는 방식을 취한다.

⌨️ 입력

  • 입력을 이해하는 것이 힘들었다..
  • 첫 번째 줄에는 이것을 몇 번 반복하는지 적는다.
  • 두 번째 줄에는 문서가 몇 개있는지, 찾는 문서의 인덱스 번호가 입력된다.
  • 세 번째 줄에는 문서들의 우선순위가 입력된다.

🖥️ 출력

  • 자신이 찾는 문서가 몇 번째로 출력되는지를 적는다.

🦯 접근

  • 그냥 쉽게 생각해서, 맨 앞에 있는 것이 max면 pop을 하고 max가 아니면 pop을 한 후 append를 하면 될 거라 생각했다.
  • 하지만 "같은 숫자일 때"를 처리해주었어야 했다.

📄 코드 짜는 과정


1. 처음으로 짠 코드에서는 내가 찾아야 하는 인덱스를 그냥 무작정 아무 글자인 "answer"을 집어넣어서, "answer"가 몇 번째에 출력되는지를 알아내려 했다.
    queue_list = list(sys.stdin.readline().split()) # 몇 개 입력할 건지에 따른 리스트 
    queue_list[M] = "answer"


    for i in queue_list:
        if(i==max(queue_list)): # 만약, 리스트에서 최대 값이 현재 있는 값이라면?
            printed += 1 # print의 숫자를 올려라

            if(queue_list[0]=="answer"): # 만약 리스트의 숫자가 최대값이면서 현재 내가 찾는 값이라면?
                print(printed) # 지금까지 프린트 된 숫자를 프린트해라
                break
            else:
                queue_list.pop()
            
        else:
            queue_list(queue_list.pop())

-> 당연히, 될 리가 없었다. max(queue_list)가 돌아가지 않기 때문이다!


2. 그래서 나는 "아! 문자 말고 아무 숫자를 넣자" 라는 생각으로 100을 집어 넣었다.
-> 이것도 생각해보니 max(queue_list)에 100이 되어버려서 될 리가 없었다.


3. 2차원 배열을 사용하여, 하나에는 인덱스 값 / 하나에는 우선 순위 값을 넣었다.

📘 최종 코드

import sys

num = int(input()) # 테스트 케이스 몇 번 돌릴 것인지

for i in range(num):
    queue_degree = []
    printed = 0 # 이거는 몇 번째로 인쇄되는지


    N, M = map(int,input().split()) # 몇 개 입력할 건지, 출력할 숫자
    queue_list = list(map(int, sys.stdin.readline().split())) # 몇 개 입력할 건지에 따른 리스트 / [1, 2, 3, 4]

    for i in range(len(queue_list)):
        queue_degree.append([i, queue_list[i]]) # [[0, 1], [1, 2], [2, 3], [3, 4]]

    while(1):
        if (queue_degree[0][1] == max(queue_list)):
            printed += 1
            # print(queue_list[0])
            if (queue_degree[0][0]==M):
                print(printed)
                break

            else:
                queue_list.pop(0)
                queue_degree.pop(0)

        else:
            queue_list.append(queue_list.pop(0))
            queue_degree.append(queue_degree.pop(0))

-> 로직은 위에 것과 똑같고, max 값이 제일 앞에 있는 값과 같다면 인덱스를 비교하여 내가 찾고자 하는 인덱스 번호가 맞는지를 확인한다.

profile
Hello Velog

0개의 댓글