이와 같은 방식으로 수행되며 priorities에 각 프린트에 우선순위가 정해져 있있다. 나의 프린트물은 location(0부터 시작)에 있으며 몇번째에 프린트가 될까? 리턴하는 문제이다.
번호 | priorities | location | return |
---|---|---|---|
1 | [2, 1, 3, 2] | 2 | 1 |
2 | [1, 1, 9, 1, 1, 1] | 0 | 5 |
프린트갯수선언
나의 프린트 선언
priorities 배열을 한바퀴 루프를 돌아야함
문제 설명에 보듯이 제일 앞의 벨류의 우선순위보다 높은것이 있다면 뒤로 보냄
그렇지 않으면 프린트하고 만약에 그 프린트가 되면 차례(location)가 줄어드는데 0이 되면 print횟수를 리턴하면 답이된다.
function solution(priorities, location) {
let printCount = 0;
let myDoc = location;
while (priorities.length > 0) {
let firstDoc = priorities.shift();//앞에서 제거
let prior = priorities.filter((e) => e > firstDoc);
if (prior.length > 0) {//만약에 우선순위가 제거된 거보다 큰것이 없다면 뒤로 다시 푸쉬하고 넣음
priorities.push(firstDoc);
} else {
//만약에 우선순위가 제거된 거보다 큰것이 있다면 프린트해버리고 프린트 숫자가 늘면 차례가 줄어든다. 그렇기 때문에 myDoc 즉 location이 0이라면 그 printCount를 리턴하면 답이된다.
printCount++;
if (myDoc === 0) {
return printCount;
}
}
myDoc--;// 차례는 우선순위를 따질때 마다 줄어든다.
if (myDoc === -1) { //만약에 차례가 0을 지나 마이너스가 된다면 뒤로 간것이기 때문에 다음과 같이 처리를 해준다
myDoc = priorities.length - 1;
}
}
}
회고 : 계속 필터, 맵등 메소드의 중요성을 꺠달고 있다. 기초를 좀더 단단하게 쌓아야 겠다.