[JavaScript] 프로그래머스 Lv2 프로세스

김민수·2023년 9월 25일

프로그래머스

목록 보기
3/7
post-thumbnail

📝 [Lv2 프로세스]

입력

priorities : 중요도가 순서대로 담긴 배열
location : 몇 번째로 실행되는지 알고싶은 프로세스의 위치

제한

  • 1 <= priorities의 길이 <= 100
  • 1 <= priorities의 원소(정수) <= 9
  • priorities의 원소 = 우선순위를 나타내며 숫자가 클 수록 우선순위가 높습니다.
  • 0 <= location <= (대기 큐에 있는 프로세스 수 - 1)
  • priorities의 가장 앞에 있으면 0, 두 번째에 있으면 1 … 과 같이 표현

출력

해당 프로세스가 몇 번째로 실행되는가

풀이

class Queue {
  constructor(){
    this.queue = [];
    this.front = 0;
    this.rear = 0;
    this.cnt = 0;
  }

  enqueue(value, chk){
    this.queue[this.rear++] = value;
    if(chk) this.cnt -= 1;
  }

  dequeue(){
    const value = this.queue[this.front];
    delete this.queue[this.front];
    this.front += 1;
    this.cnt += 1;
    return value;
  }
}

function solution(arr, num){

  let queue = new Queue()
  arr.forEach((e,i) => queue.enqueue([e, i], false));
  let sArr = [...arr].sort((a,b) => a - b);

  while(true){
    let [value, index] = queue.dequeue();
    let maxValue = sArr[sArr.length-1];
    if(index === num && value == maxValue) break;
    maxValue === value ? sArr.pop() : queue.enqueue([value, index], true);
  }
  return queue.cnt;

}

설명

  1. Array로 Queue를 구현한 후, 안에 값과 인덱스를 넣은 후, 비교하였다.
  2. 결과값인 this.cnt 에는 초반에 넣을때 +1 을 하면 안되기 때문에 구분자를 두었다.

0개의 댓글