algorithm/문제풀이

스택/큐 > 프로세스

yongfront 2024. 2. 22. 04:20
반응형
SMALL

https://school.programmers.co.kr/learn/courses/30/lessons/42587?language=javascript

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다.
2. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다.
3. 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다.
  3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다.

를 실제로 구현해보고자 했다

 

function solution(priorities, location) {
    let arr = [];
    while (priorities.length > 0) {
        let q = priorities.shift();
        q < Math.max(...priorities) ? priorities.push(q) : arr.push(q);
    }
    console.log(arr);
    return arr[location];
}

 

제대로 구현은 되지만 각각의 위치를 알 수가 없는 문제가 발생

객체화 해서 각각의 index를 파악해야함

 

function solution(priorities, location) {
    let arr = [];
    // priorities 배열의 각 요소를 {index, priority} 객체로 변환
    let objects = priorities.map((priority, index) => ({ index, priority }));

    while (objects.length > 0) {
        let current = objects.shift();
        // 현재 문서보다 우선순위가 높은 문서가 남아 있다면, 현재 문서를 배열 끝으로 이동
        if (objects.some(obj => obj.priority > current.priority)) {
            objects.push(current);
        } else {
            // 그렇지 않다면 현재 문서를 arr 배열에 인쇄
            arr.push(current);
        }
    }

    // arr 배열에서 원래 location에 해당하는 문서의 위치(인덱스)를 찾아 반환
    // 배열의 인덱스는 0부터 시작하지만, 인쇄 순서는 1부터 시작하므로 1을 더해줌
    return arr.findIndex(obj => obj.index === location) + 1;
}

스택/큐와 더불어 우선순위와 함께 원래 인덱스를 객체로 묶어 관리하는 방법을 알아야 하는 문제

 

728x90
반응형
LIST