PROGRAMMERS Python Lv2. 프린터
이번 문제는 프린터이다.
정답 코드는 다음과 같다.
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를 잘 활용하지 못하는 것 같다.
- 우선 주어진 리스트의 각 원소 위치를 저장하는 것이 중요하다.
enumertate를 통해 이 작업을 수행해주고,
- 이제 첫번째 원소부터 뽑아서 최댓값과 비교해주면 된다.
보통은 max를 사용했지만 여기선 any를 사용했다는 점이 효율성을 높여줬다.
-
어느 하나라도 큰 수가 존재한다면 리스트 맨 뒤에 append 시켜준다.
-
else를 통해 추출한 원소가 제일 큰 수라면 answer += 1을 해준다.
-
이를 반복하다 보면 가장 큰 수인 9가 (2,9)의 형태로 비교될 때,
더 이상 append 되지 않고 answer에 1이 저장된 상태로 사라진다.
- 이를 반복하다 보면 마지막에 (0,1) (1,1)만 남게되고,
그 이전까진 answer에 4가 저장된다. location이 이번 경우에 같아지므로
answer를 return한다.
이 문제를 쉽게 풀지 못해 많이 아쉽고, 배워야 할 부분이 많다는 걸 다시
한번 느낀다.
댓글남기기