프로그래머스 연습문제 - 프린터( JS, Lv2, 스택/큐)
function solution(priorities, location) {
let result = 0;
while (priorities.length > 0) {
let p = priorities.shift();
if (priorities.filter((el) => el > p).length) {
priorities.push(p);
}
else {
result++;
if (location === 0) {break;}
}
location < 1 ? location = priorities.length - 1 : location -= 1;
}
return result;
}
대기열에 맨 앞의 원소를 빼내어 p에 할당한다.
만약 맨 앞의 원소가 빠진 우선순위배열에서 p보다 큰 것이 있는지 찾는다.
2-1. 있다면 우선순위 배열의 맨 뒤에 다시 넣는다.(우선순위가 큰 것부터 출력되어야하기 때문)
2-2. 없다면 p가 가장 큰 우선순위를 갖는다는 것을 뜻하므로 p가 출력된 것으로 처리한다. result값을 증가시켜 출력순서를 증가
출력순서를 알고싶은 원소의 index(=location)
location < 1 이라면 location = priorities.length - 1 로 인덱스를 맨뒤로 이동, 그렇지 않다면 -1을 하여 앞으로 한 칸 이동
맨 앞의 원소가 빠진 우선순위배열에서 p보다 큰 것 없고 location이 0이라면(출력순서를 알고싶은 원소가 첫번째에 위치), break하며 루프를 빠져나간다.
some
: 배열 안의 어떤 요소라도 주어진 판별 함수를 적어도 하나라도 통과하는지 테스트
const array = [1, 2, 3, 4, 5];
// Checks whether an element is even
const even = (element) => element % 2 === 0;
console.log(array.some(even));
// Expected output: true
=> filter(function).length 대신 사용할 수 있겠다.