[Programmers] 프린터

suhyun·2022년 5월 2일
0

백준/프로그래머스

목록 보기
17/81

문제 링크

Level2. 프린터

문제 설명

입력

  • 대기 목록의 중요도 리스트(priorities)
  • 현재 대기 목록에서의 위치 (location) -> 제일 앞에 있으면 0부터 시작

출력

  • 인쇄 요청한 문서가 몇번째로 출력되는지 리턴

문제 풀이

인쇄 대기 목록의 가장 앞의 문서를 꺼내서
중요도가 가장 높은 함수면? -> 인쇄
그렇지 않으면? -> 대기목록에 가장 마지막으로

당연히 큐로 풀어야겠다!

덜 효율적인 방법,,

def solution(priorities, location):

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

	# 좀 더 효율적인 방법이 없을까,,? 더 간단히 표현할 수 있는 부분 같은데
    while priorities:

        max_num = max(priorities)
		
        # 리스트의 최대값과 같으면 결과 리스트에 추가
        if priorities[0] == max_num:
            result.append(tuple_priorities[0])
            tuple_priorities.pop(0)
            priorities.pop(0)
        
        # 아니면 대기목록 가장 마지막으로 추가
        else:
            tmp = priorities.pop(0)
            priorities.append(tmp)

            tmp = tuple_priorities.pop(0)
            tuple_priorities.append(tmp)

    for i in range(len(result)):
        if result[i][0] == location:
            return i+1

-> 구글링하다보니 새로운 방법을 발견함

더 효율적인 방법 (any사용)

def solution(priorities, location):
    tuple_priorities = [(i, p) for i, p in enumerate(priorities)]
    answer = 0 
    
        while 1:
        	# 최대값과 현재값의 비교를 any를 사용해서 효율적으로 구현
            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를 이용해 현재값과 비교해서 결과 리턴

profile
꾸준히 하려고 노력하는 편 💻

0개의 댓글