[백준]1966 - 프린터

·

2 min read

💡문제 분석 요약

-- 문제 --

입력 : N, M

  • 중요도 존재

  • 나머지 문제 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면 큐 가장 뒤에 재배치, 그렇지 않다면 인쇄.

💡알고리즘 설계

  1. input을 통해 N, M 입력

  2. 중요도와 문서 인덱스 입력하는 리스트 생성

  3. 중요도 비교 후 현재보다 중요도가 높은 문서가 있다면 popleft후 book리스트 뒤에 넣어주기. 아니라면 결과 리스트에 빼주기.

💡코드

t= int(input())
n, m = map(int, input().split())
book=[]
for i in range(t):
    imp=list(map(int, book))

💡시간복잡도

O(N)

💡틀린 이유

  1. 문제의 조건을 구현하는 능력이 떨어진다.

💡틀린 부분 수정 or 다른 풀이

from collections import deque
t = int(input()) # 테스트케이스 수

for _ in range(t):
    n, m = map(int, input().split()) # 문서의 수, 궁금한 책이 현재 있는 위치
    query_book = m+1 # 궁금한 책의 번호

    deq = deque()
    imp_list = list(map(int, input().split())) # 중요도를 리스트로 저장

    for i in range(n):
        deq.append([i+1, imp_list[i]]) # deque에 책 번호와 중요도 순서대로 저장

    answer = [] # 인쇄 문서번호를 순서대로 저장

    while deq:
        book_n, book_i = deq.popleft()

        if any(book_i<x[1] for x in deq): # deq에 남아 있는 책들 중 중요도가 하나라도 높은게 있다면
            deq.append([book_n, book_i]) # 다시 deq에 append
        else:
            answer.append(book_n) # 현재 인쇄 대기문서가 가장 큰 우선순위라면, 인쇄 진행
            if book_n == query_book: # 이때 문서번호가 궁금한 책의 번호와 일치한다면
                print(answer.index(book_n) + 1) # 해당 문서의 인덱스(순서)에 1 더해 출력

💡느낀점 or 기억 할 정보

  1. 처음 코테를 접하다보니 접근하는데 어려움을 느낌. -> 문제 많이 접해보기.

  2. 개념만 공부하지 말고 기본 구현한 코드 많이 접해보기.

  3. for 하나로 해결하려하지 말기.

  4. 40분 이상 고민해보고 코드 안나오면 먼저 확인하고 구현해보기.