Algorithm
프로그래머스
Python
프로세스

프로세스

문제 주소

https://school.programmers.co.kr/learn/courses/30/lessons/42587 (opens in a new tab)

풀이

일단 내가 접근해서 문제를 풀고 있던 방식은

  1. 가장 큰 수의 index를 찾아서 해당 인덱스에 min값의 -1을 한다.
  2. 그런식으로 가장 큰 index를 찾아가다가 문제에서 요구하는 index(location)의 값이 되면 멈춘다. 를 생각했는데 만약에 ABCD에서 C가 가장 우선순위가 컷다면 그 다음 순서는 D부터 탐색하게 되는데 이 때, DAB의 우선순위가 모두 같다면 C 다음에 실행되는 프로세스는 A가 아니라 D가 되게 된다.

내가 풀던 방식으로 접근했을 때 index를 기억하기 어렵다는 점이 가장 큰 문제가 되었다. dict 자료형을 사용해서 풀어볼까도 생각했지만 그러면 index를 key로 담고 value를 기준으로 비교를 해야하는데 그렇게하면 코드 복잡도가 증가했다. 느낌상 그런 문제는 아닌거 같아서 다른 방법을 찾다가 결국 정답을 보게 되었다.
문제를 풀면서 내가 간과한 것은 index와 location간의 상관관계다. index에서 pop을 통해서 해당 값을 빼주게 되면 location 정보가 변하게 되면서 기존의 index 정보를 찾을 방법이 없다는 것이 내가 구상하던 알고리즘의 문제였다.
하지만 이는 location 정보를 같이 변화시켜주면서 간단하게 해결했다.

from collections import deque
 
def solution(priorities, location):
  q = deque(priorities)
  answer = 0
  while q:
    max = max(q)
    cur_val = q.popleft()
    location -= 1 
    # l이 만약에 내가 찾는 걊이 아니면 
    if cur_val != max:
      # 다시 추가한다
      q.append(cur_val)
      if location < 0:
        location = len(q) -1
    else:
      answer += 1
      if location < 0:
        break
      
  return answer