[Level2] 프린터

Quesuemon·2021년 3월 25일
0

코딩테스트 준비

목록 보기
4/111

🛠 문제

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


👩🏻‍💻 해결 방법

문제를 이해하는 것은 어렵지 않았지만, 구현하는 부분에서 조금 시간이 걸렸다
enumerate를 통해 (우선순위, 위치) 정보를 가진 배열을 생성하고, 배열에서 맨 앞 데이터를 뺐다가 다시 맨 뒤에 넣는 과정을 위해 deque를 사용했다
처음에는 런타임 에러가 났었는데, 큐가 비어있지 않을 경우의 조건을 추가하여 해결했다
두 번째 시도에는 시간 초과가 났는데, 이는 조건문의 순서를 바꿔서 해결했다(?)

소스 코드

from collections import deque
def solution(priorities, location):
    data = [(pri, idx) for idx, pri in enumerate(priorities)]
    data = deque(data)
    
    cnt = 0
    while len(data):
        pri, idx = data.popleft()
        if data and max(data)[0] > pri:
            data.append((pri, idx))
    
        else:
            cnt += 1
            if idx == location:
                return cnt

💡 다른 사람의 풀이

any() : 반복 가능한 자료형 내 element 중 하나라도 True인지 확인하는 함수

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

0개의 댓글