문제 설명
운영체제의 역할 중 하나는 컴퓨터 시스템의 자원을 효율적으로 관리하는 것입니다. 이 문제에서는 운영체제가 다음 규칙에 따라 프로세스를 관리할 경우 특정 프로세스가 몇 번째로 실행되는지 알아내면 됩니다.
1. 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다.
2. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다.
3. 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다.
3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다.
예를 들어 프로세스 4개 [A, B, C, D]
가 순서대로 실행 대기 큐에 들어있고, 우선순위가 [2, 1, 3, 2]
라면 [C, D, A, B]
순으로 실행하게 됩니다.
현재 실행 대기 큐(Queue)에 있는 프로세스의 중요도가 순서대로 담긴 배열 priorities
와, 몇 번째로 실행되는지 알고싶은 프로세스의 위치를 알려주는 location
이 매개변수로 주어질 때, 해당 프로세스가 몇 번째로 실행되는지 return 하도록 solution 함수를 작성해주세요.
제한사항
priorities
의 길이는 1 이상 100 이하입니다.priorities
의 원소는 1 이상 9 이하의 정수입니다.priorities
의 원소는 우선순위를 나타내며 숫자가 클 수록 우선순위가 높습니다.
location
은 0 이상 (대기 큐에 있는 프로세스 수 -1) 이하의 값을 가집니다.priorities
의 가장 앞에 있으면 0, 두 번째에 있으면 1 … 과 같이 표현합니다.
입출력 예
priorities | location | return |
---|---|---|
[2,1,3,2] | 2 | 1 |
[1,1,9,1,1,1] | 0 | 5 |
풀이
우선순위 큐와 마찬가지 이지만 순서가 다르다. 우선 가장 우선순위가 높은 요소부터 리스트에 들어가야 하지만. 리스트를 순서대로 계속 돌아야 한다. 예를들어 리스트 첫번째와 마지막이 중요도가 같고 중간에 더 높은 우선순위의 요소가 있다면 높은 우선순위, 첫번째 요소,마지막 요소 순서가 아니라. 높은 우선순위, 두번째, 첫번째 처럼 우선순위 이후 가장 인접한 다음 최우선 요소가 순서대로 와야 한다.
이를 위해서는 순서대로 루프를 돌려주어야 한다.
while
문을 활용해서 루프를 돌 때마다 우선순위 리스트의 가장 큰 숫자를 확인하고
가장 큰 숫자를 확인할 때 마다 해당 요소의 값을 0으로 초기화 시켜줄 것이다.