이롭게 현명하게

[programmers - 42587] Lv2 프로세스/ JavaScript 본문

카테고리 없음

[programmers - 42587] Lv2 프로세스/ JavaScript

dev_y.h 2025. 10. 20. 18:07
728x90
반응형

programmers


문제

풀이

코드 설명

코드

후기


 

[programmers - 42587] Lv2 프로세스 / JavaScript


[🔗문제🔗]

https://school.programmers.co.kr/learn/courses/30/lessons/42587

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

42587 문제

[제한사항]

42587 문제 제한사항

[입출력 예시]

priorities location return
[2, 1, 3, 2]  2
[1, 1, 9, 1, 1, 1]
0 5

 

 


[풀이]

큐(Queue)

실행 대기 큐가 있다.

실행 대기 큐에는 프로세스 A,B,C,D가 있다.

실행대기 큐

 

실행대기 큐의 우선순위이다.

이 프로세스는우선순위가 있어 우선순위가 높은 것부터 실행된다.

실행 대기 큐 우선순위

 

location은 내가 궁금한 프로세스가 큐의 몇번째인지 가리키는 숫자이다.

즉 C의 실행 순서가 알고싶다.

 

큐는 다음과 같은 규칙을 가지고 실행한다.

1. 큐의 맨 앞 프로세스를 꺼낸다.
2. 아직 큐에 남아 있는 프로세스들 중, 
   만약 더 높은 우선순위가 있다면 ? -> 꺼낸 프로세스를다시 큐의 맨뒤로 보낸다.
   그렇지 않다면 ?  -> 프로세스를 실행(완료) 시킨다.
		   -> 한 번 실행된 프로세스는 큐에서 제거

 

[1단계

실행 대기 큐의 맨 앞 프로세스를 꺼낸다.

[1단계]실행 대기 큐의 맨 앞 프로세스 pop

 

남은 프로세스 중 더 높은 우선순위가 있는지 확인한다.

[1단계] 우선순위 확인

남은 프로세스에 더 높은 우선순위가 있다.

그래서 꺼낸 프로세스르 다시 큐로 보낸다.

[1단계] 더 높은 우선순위 확인
[1단계] 실행 대기 큐에 push
1단계가 끝난 후 실행 대기 큐 상태

1단계가 끝났다.

 

[2단계]

실행 대기 큐의 맨 앞 프로세스를 꺼낸다.

[2단계] 실행 대기 큐의 맨 앞 프로세스 pop

 

남은 프로세스들 중 더 놓은 우선순위가 있는지 확인한다.

[2단계] 우선순위 확인

 

남은 프로세스에 더 높은 우선순위가 있다.

그래서 꺼낸 프로세스를다시 큐로 보낸다.

[2단계] 더 높은 우선순위 확인
[2단계] 실행 대기 큐에 push
2단계가 끝난 후 실행 대기 큐 상태

2단계가 끝났다.

 

[3단계]

실행 대기 큐의 맨 앞 프로세스를 꺼낸다.

[3단계] 실행 대기 큐의 맨 앞 프로세스 pop

 

남은 프로세스 중 더 높은 우선순위가 있는지 확인한다.

[3단계] 우선순위 확인

 

남은 프로세스에 더 높은 우선순위가 없다.

그래서 꺼낸 프로세스를 실행시킨다.

첫번째로 실행되는 프로세스는 C다.

[3단계] 우선순위가 가장 높은 프로세스 실행

 

이 때 location은 C다

즉 C의 실행순서는 1번으로 실행된다.

실행되는 c 프로세스

 


[코드 설명]

var queue = priorities.map((priority, index) => [priority, index]) 우선순위, 인덱스 저장
while (queue.length > 0) { … } 큐(대기열)가 비어 있을 때까지 반복
const current = queue.shift(); 큐 맨 앞요소 꺼냄
const orderHigh = queue.some((item) => item[0] > current[0]); 남은 큐 안에 더 높은 우선순위가 있는지 확인
if (orderHigh) { queue.push(current); } 더 높은 우선순위가 있는 경우 큐 뒤로
else {
    answer++;
    if (current[1] === location) {
        return answer;
    }
}
더 높은 우선순위가 없다면
answer : 실행 순서 카운터
if문 : 내가 찾던 프로세스라면 결과 반환

 

<코드>

// [Programmers - 42587] 프로세스
function solution(priorities, location) {
    var answer = 0;
    var queue = priorities.map((priority, index) => [priority, index]);
    while (queue.length > 0) {
        const current = queue.shift();
        const orderHigh = queue.some((item) => item[0] > current[0]);
        if (orderHigh) {
            queue.push(current);
        } else {
            answer++;
            if (current[1] === location) {
                return answer;
            }
        }
    }

    return answer;
}

 


잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!😊

댓글과 좋아요는 큰 힘이 됩니다!

728x90
반응형
Comments