코딩테스트/프로그래머스

[프로그래머스] [Level 2] [스택/큐] 프린터

박소민 2022. 7. 23. 15:38
문제) 프린터
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

  • 내 풀이
    • 처음에 queue에 value값을 넣고 key값을 찾으려 함
      • -> 런타임 에러
    • queue에 key값을 넣어서 풀이
      • key값이 유일하기 때문에 value로 key값을 찾는게 아니라 key로 value 찾아야 함
    • dictionary.get(key) 로 value값을 바로 찾을 수 있음
    • dic.values()로 위에서 찾은 value를 모든 value값들과 비교 가능
from collections import deque

def solution(priorities, location):
    answer = []
    queue=deque([i for i in range(len(priorities))])
    dic={idx:p for idx,p in enumerate(priorities)}
    
    while queue:
        key=queue.popleft()
        value=dic.get(key)
        
        if value<max(dic.values()):
            queue.append(key)
            continue
        answer.append(key)
        del dic[key]
    
    return answer.index(location)+1
    




  • 다른 사람 풀이
    • 딕셔너리 없이 queue만으로 해결
    • popleft()대신 pop(0) 하면 (idx, p) 값 한번에 출력됨
      • -> (idx, p)값에 인덱스를 사용해서 각각 불러오기 가능
    • 대신 value값 비교를 매번 for문을 돌아서 전체 비교
    • 순서를 인덱스 값이 아닌 answer+=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