이롭게 현명하게
[programmers - 42587] Lv2 프로세스/ JavaScript 본문

문제
풀이
코드 설명
코드
후기
[programmers - 42587] Lv2 프로세스 / JavaScript
[🔗문제🔗]
https://school.programmers.co.kr/learn/courses/30/lessons/42587
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr

[제한사항]

[입출력 예시]
| priorities | location | return |
| [2, 1, 3, 2] | 2 | 1 |
| [1, 1, 9, 1, 1, 1] |
0 | 5 |
[풀이]
큐(Queue)
실행 대기 큐가 있다.
실행 대기 큐에는 프로세스 A,B,C,D가 있다.

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

location은 내가 궁금한 프로세스가 큐의 몇번째인지 가리키는 숫자이다.
즉 C의 실행 순서가 알고싶다.

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

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

남은 프로세스에 더 높은 우선순위가 있다.
그래서 꺼낸 프로세스르 다시 큐로 보낸다.



1단계가 끝났다.
[2단계]
실행 대기 큐의 맨 앞 프로세스를 꺼낸다.

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

남은 프로세스에 더 높은 우선순위가 있다.
그래서 꺼낸 프로세스를다시 큐로 보낸다.



2단계가 끝났다.
[3단계]
실행 대기 큐의 맨 앞 프로세스를 꺼낸다.

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

남은 프로세스에 더 높은 우선순위가 없다.
그래서 꺼낸 프로세스를 실행시킨다.
첫번째로 실행되는 프로세스는 C다.

이 때 location은 C다
즉 C의 실행순서는 1번으로 실행된다.

[코드 설명]
| 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;
}
잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!😊
댓글과 좋아요는 큰 힘이 됩니다!

