[백준]1966 - 프린터
💡문제 분석 요약
-- 문제 --
입력 : N, M
중요도 존재
나머지 문제 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면 큐 가장 뒤에 재배치, 그렇지 않다면 인쇄.
💡알고리즘 설계
input을 통해 N, M 입력
중요도와 문서 인덱스 입력하는 리스트 생성
중요도 비교 후 현재보다 중요도가 높은 문서가 있다면 popleft후 book리스트 뒤에 넣어주기. 아니라면 결과 리스트에 빼주기.
💡코드
t= int(input())
n, m = map(int, input().split())
book=[]
for i in range(t):
imp=list(map(int, book))
💡시간복잡도
O(N)
💡틀린 이유
- 문제의 조건을 구현하는 능력이 떨어진다.
💡틀린 부분 수정 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 기억 할 정보
처음 코테를 접하다보니 접근하는데 어려움을 느낌. -> 문제 많이 접해보기.
개념만 공부하지 말고 기본 구현한 코드 많이 접해보기.
for 하나로 해결하려하지 말기.
40분 이상 고민해보고 코드 안나오면 먼저 확인하고 구현해보기.