728x90
문제 설명
현재 대기목록에 있는 문서의 중요도가 순서대로 담긴 배열 priorities와
내가 인쇄를 요청한 문서가 현재 대기목록의 어떤 위치에 있는지를
알려주는 location이 매개변수로 주어질 때,
내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 return 하도록 solution 함수를 작성해주세요.
제한 사항
- 현재 대기목록에는 1개 이상 100개 이하의 문서가 있습니다.
- 인쇄 작업의 중요도는 1~9로 표현하며 숫자가 클수록 중요하다는 뜻입니다.
- location은 0 이상 (현재 대기목록에 있는 작업 수 - 1) 이하의 값을 가지며
대기목록의 가장 앞에 있으면 0, 두 번째에 있으면 1로 표현합니다.
문제 풀이 방법
- 중요도에 따라 각 문서의 인덱스와 중요도를 map()으로 배열화 시켜 준다.
- 각 문서의 중요도와 인덱스가 담긴 배열을 shift()로 때어낸 뒤 나머지 배열의 중요도와 비교한다.
- 중요도가 더 높은 문서가 있다면 push()로 원래 배열에 넣어주고,
없다면 새로운 배열에 넣어준다. - 인자로 받은 location(0부터 시작하는 index와 같음)과 같은 인덱스를 갖은 문서가 나오는 순서를 반환
주의 사항
- 이 문제는 인덱스와 중요도의 관계, 대기목록의 형성이 코드 작성시 중요한 Point이다.
참고 문헌
- Array.find() : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/find
- Array.shift() : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/shift
코드
function solution(priorities, location) {
let answer = 0;
let prioArr = priorities.map((p, i) => {return [i, p]})
let arr = [];
if(prioArr.length){
while(prioArr.length > 0){
let firstNum = prioArr.shift()
if(prioArr.find(n => n[1] > firstNum[1])){
prioArr.push(firstNum);
}
else{
arr.push(firstNum);
}
}
}
arr.forEach((l, i) => {
if(l[0] === location){
return answer = i+1;
}
})
console.log(arr);
return answer;
}
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
깊이-너비 우선 탐색 / 2 / 타겟 넘버 (JS) dfs (0) | 2022.06.13 |
---|---|
스택큐 / 2 / 다리를 지나는 트럭 (JS) (0) | 2022.06.12 |
스택큐 / 2 / 기능개발 (JS) (0) | 2022.06.10 |
완전탐색 / 2 / 카펫 (JS) (0) | 2022.06.10 |
완전탐색 / 2 / 소수찾기 (JS) (0) | 2022.06.09 |