🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42587
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
✏️ 풀이
function solution(priorities, location) {
const docs = priorities.map((priority, index) => ({ priority, index }));
let order = 1;
while (true) {
const { priority, index } = docs.shift();
if (docs.some(({ priority: p }) => p > priority)) {
docs.push(({ priority, index }));
} else {
if (index === location) {
return order;
}
order++;
}
}
}
먼저 대기목록 순서가 바뀌어도 원래 인쇄 요청의 순서를 기억하기 위해 priorities를 priority와 index를 갖는 객체로 변환하였다. 그 다음 인쇄 작업 규칙에 따라 인쇄 목록의 맨 앞 문서를 대기목록에서 빼고(shift) 이 문서의 우선순위보다 더 높은 우선순위의 문서가 남은 대기목록에 단 하나라도 존재하면 맨 뒤에 다시 넣고, 그렇지 않다면 인쇄한다.
여기서 인쇄한다는 것은 이미 문서를 대기목록에서 제거했으므로 아무것도 하지 않으면 인쇄한 것이다. 다만 인쇄한 순서를 기록하기 위해 인쇄할 때마다 order의 값을 갱신한다. 이 때 만약 주어진 location과 같은 index의 문서를 인쇄한다면 그 즉시 order를 반환하도록 하였다.
'연습장 > 프로그래머스 문제풀이' 카테고리의 다른 글
[프로그래머스 Level 2] 호텔 대실 - JavaScript (0) | 2023.02.04 |
---|---|
[프로그래머스 Level 3] N으로 표현 - JavaScript (0) | 2023.01.23 |
[프로그래머스 Level 2] 괄호 회전하기 - JavaScript (0) | 2023.01.14 |
[프로그래머스 Level 2] 행렬의 곱셈 - JavaScript (0) | 2023.01.13 |
[프로그래머스 Level 3] 입국심사 - JavaScript (0) | 2023.01.10 |