PROGRAMMERS Python Lv2. 프린터

최대 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

이 문제를 직접 풀지 못해서, 제일 잘 작성된 코드를 분석하려 한다.

내가 처음 도전했던 방법은 주어진 location의 수가 중복된 것이 있을 때,

그 위치를 구분하지 못해서 실패한 코드였다.

이 문제를 풀기 위해 사용했었던 함수는 pop, append, enumertate였다.

그렇지만 아직 enumertate를 잘 활용하지 못하는 것 같다.

  1. 우선 주어진 리스트의 각 원소 위치를 저장하는 것이 중요하다.

enumertate를 통해 이 작업을 수행해주고,

  1. 이제 첫번째 원소부터 뽑아서 최댓값과 비교해주면 된다.

보통은 max를 사용했지만 여기선 any를 사용했다는 점이 효율성을 높여줬다.

  1. 어느 하나라도 큰 수가 존재한다면 리스트 맨 뒤에 append 시켜준다.

  2. else를 통해 추출한 원소가 제일 큰 수라면 answer += 1을 해준다.

  3. 이를 반복하다 보면 가장 큰 수인 9가 (2,9)의 형태로 비교될 때,

더 이상 append 되지 않고 answer에 1이 저장된 상태로 사라진다.

  1. 이를 반복하다 보면 마지막에 (0,1) (1,1)만 남게되고,

그 이전까진 answer에 4가 저장된다. location이 이번 경우에 같아지므로

answer를 return한다.

이 문제를 쉽게 풀지 못해 많이 아쉽고, 배워야 할 부분이 많다는 걸 다시

한번 느낀다.

댓글남기기