[Python/Programmers] 프린터

정나린·2022년 3월 10일

문제

1. 난이도: 프로그래머스 Level 2

2. 문제요약:

1) 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
2) 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
3) 그렇지 않으면 J를 인쇄합니다.

3. 문제핵심: 큐(Queue)

  • 큐: 먼저 들어온 데이터가 먼저 나가는 형식 (선입선출)
  • 입구와 출구가 모두 뚫려 있는 상태

내 코드

from collections import deque;

def solution(priorities, location):
    p_queue = deque(priorities);
    i_queue = deque(list(range(len(priorities))));
    i_list = []

    while p_queue:
        p = p_queue.popleft()
        if p_queue:
            if p < max(list(p_queue)):
                p_queue.append(p);
                i = i_queue.popleft();
                i_queue.append(i);
            else:
                i = i_queue.popleft();
                i_list.append(i);
        else:
            i = i_queue.popleft();
            i_list.append(i);
    return i_list.index(location) +1;

이상 코드

def solution(priorities, location):
    queue =  [(i,p) for i,p in enumerate(priorities)]
    answer = 0
    while True:
        cur = queue.pop(0)
        if any(cur[1] < q[1] for q in queue):
            queue.append(cur)
        else:
            answer += 1
            if cur[0] == location:
                return answer
  1. enumerate
  • 인덱스(index)와 원소를 동시에 접근하면서 루프를 돌리는 함수
for fruit in enumerate(['apple', 'berry', 'orange']):
	print(fruit)
  
 
 (0, 'apple')
 (1, 'berry')
 (2, 'orange')
  • 시작 인덱스를 정할 수 있음
for fruit in enumerate(['apple', 'berry', 'orange'], start=1):
	print(fruit)
  
 
 (1, 'apple')
 (2, 'berry')
 (3, 'orange')
  1. any
  • 반복 가능한 자료형 내 element 중에서 하나라도 True이면 True 반환
  • 위의 이상 코드에서 max를 쓰지 않아도 됨
  • any의 파라미터가 라면 False를 반환한다

0개의 댓글