제주 탈출 일지

[python3] 프로그래머스 레벨 2 - 프린터 본문

코딩 테스트

[python3] 프로그래머스 레벨 2 - 프린터

귀건 2021. 6. 17. 18:54
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/42587?language=python3 

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

 

# 최종 코드

from collections import deque

def solution(priorities, location):
    answer = 0
    a = deque(priorities)    
    b = location
    
    while True :
        if len(a) == 1:
            break
        
        tmp = a.popleft()
        
        if tmp >= max(a):
            answer += 1
            if b == 0 :
                return answer
            else :
                if b == 0 :
                    b = len(a) - 1
                else:
                    b -= 1
            
        else :
            a.append(tmp)
            if b == 0 :
                b = len(a) - 1
            else:
                b -= 1
    return answer + 1

 

deque를 이용해서 문제에 주어진

1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.

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

이 조건을 구현했다. 단순히 리스트를 이용해도 구현할 수 있겠지만, 생각하기 편하게 구현하는 것이 좋아서리..,,

+ len(a) == 0 로 탈출조건 설정을 하면 안되는 이유가 리스트 내부의 max(a)가 없기 때문에 무한 루프 or 에러가 나게 됨. 

 

다른사람의 풀이

1. any를 사용해서 비교를 편하게 할 수도 있었다. (any -> iterable 객체에서 True가 하나라도 있다면 True 반환,  만약 empty라면 False 반환)

2. enumerate를 이용해서 몇 번쨰로 반복문이 돌아가고 있는지 확인할 수있다. (enumerate 사용 시 (index, value) 형태의 튜플로 값이 돌아감.)

3. 고수들은 리스트 컴프리핸션을 자유롭게 사용한다. 연습을 많이 해야함 . ㅎ...ㅎ

queue = [(i,p) for i,p in enumerate(priorities)] 

 

728x90
반응형
Comments