ProblemSolving/Stack, Queue

프로그래머스 프린터 (파이썬)

OSNIM 2022. 5. 5. 15:30
반응형

Level 2 스택/큐

 

문제 : https://programmers.co.kr/learn/courses/30/lessons/42587

 

코딩테스트 연습 - 프린터

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

programmers.co.kr

 

첫번째 풀이 

from collections import deque 

def solution(priorities, location):
    answer = 0
    q = deque(priorities)
    idx = deque([i for i in range(len(q))])
    cnt = 1
    
    while q:
        M = max(q)
        pri = q.popleft()
        i = idx.popleft()
        
        if pri != M:
            q.append(pri)
            idx.append(i)
        else:
            if i == location:
                answer = cnt
                break
            cnt += 1
            
        answer = cnt
    return answer

매 q 마다 최댓값을 찾아 큐의 맨 앞이 가장 큰 값이 아니면 큐 맨 뒤로 넣어주고 가장 큰 값이면 내가 찾는 위치가 맞는지 확인해서 반복 횟수를 구했습니다.

 

좋아요를 가장 많이 받은 코드

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

제 코드와 차이점은 인덱스와 우선순위를 묶어 계산하였으며

any를 이용해서 큐의 맨 앞의 값 보다 큰 값이 하나라도 있다면

True 를 반환하여 뒤에 넣습니다.

없다면 answer 를 하나 증가시켜 인덱스가 찾는 위치인지 확인을 합니다.

 

any : 하나라도 True인게 있으면 True

any([False, False, False]) #False
any([False, True, False]) #True

불 대수의 OR, || 같은 느낌입니다.

 

all : 모두 True여야 True 반환

all([False, True, False]) #False
all([True, True, True]) #True

불 대수의 AND, & 같은 느낌입니다. 

반응형