ㅁㄴㅇㄻㄴㅇㄹ

[코딩테스트] 프로그래머스 프린터 with Python 본문

코딩테스트

[코딩테스트] 프로그래머스 프린터 with Python

hanbin8269 2021. 5. 10. 13:48

아이디어

  1. 대기열의 첫번째가 나머지 보다 크다면 대기열에서 삭제 (인쇄)
    => 대기열의 첫번째 보다 나머지가 작지 않다면 대기열 맨 뒤로 보냄

  2. 하나가 인쇄 될 때 마다 answer += 1

  3. 만약 인쇄 된 문서의 순서(i)가 location과 일치한다면 answer return

  4. 하나라도 첫번째 보다 크다면 대기열 맨 뒤로 보냄

    문제 풀이 코드

    def solution(priorities, location):
     answer = 0
     priorities = [(i,value) for i, value in enumerate(priorities)]  # 1
    
     while True:
         move_to_back = False
    
         for priority in priorities:  # 2
             if priorities[0][1] < priority[1]:
                 move_to_back = True
                 break
    
         if move_to_back:  # 3
             priorities.append(priorities.pop(0))
         else: # 4
             answer += 1
             if priorities[0][0] == location:
                 return answer
             priorities.pop(0)

    1

    초기 location을 기억하기 위해 데이터 구조를 [index, value]로 변경

    2

    하나라도 맨 앞의 문서보다 중요도가 높다면 move_to_back = True

    3

    하나라도 맨 앞의 문서보다 중요도가 높다면 맨 앞의 문서를 맨 뒤로 이동시킴

    4

    맨 앞의 문서의 중요도가 가장 높으면 인쇄(대기열에서 삭제)하며 몇번째로 실행되었는지 알기 위해 answer에 +1을 해준다.
    또한, 내가 찾는 문서라면 answer을 반환한다