프로세스 문제 바로가기

나의 풀이

def solution(priorities, location):
    from collections import deque
    q = deque(priorities)
    count = 1
    while q:
        m = max(q)
        temp = q.popleft()
        location -= 1
        if location < 0:
            if temp < m:
                location = len(q)
                q.append(temp)
            else:
                return count
        else:
            if temp < m:
                q.append(temp)
            else:
                count += 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

출처

CODE REVIEW

  1. 첫 번째 풀이에서는 deque을 이용해서 풀어내었다. 원소를 맨 앞에서부터 하나씩 꺼내면서 최대인지 아닌지 따져주면 쉽게 결과를 얻을 수 있다.
  2. 다른 사람들의 풀이 구경하기 같은 경우, 논리는 비슷하지만 특이하게 any()를 이용해서 풀어내었다. 확실히 식이 깔끔해지긴 한듯! * 다만, 이 경우 priorities의 길이가 아주 길어질수록 소요시간이 급격하게 증가하기 때문에 그렇게 추천하진 않는다…