https://programmers.co.kr/learn/courses/30/lessons/42587
코딩테스트 연습 - 프린터
일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린
programmers.co.kr
첫번째 풀이 (실패~~)
function solution(priorities, location) {
var answer = 0;
var maxPriority = Math.max(...priorities);
var maxLocation = priorities.indexOf(maxPriority);
if (location == maxLocation) {
answer = 1;
} else if (location < maxLocation) {
answer = priorities.length - maxLocation + location + 1;
} else if (location > maxLocation) {
answer = location - maxLocation + 1;
}
return answer;
}
- 왜이렇게 쉽게 풀릴까. 나는 정말 알고리즘 실력이 늘어버린 걸까. 자만하면서 제출했는데 결과 처참ㅋ
두번째 풀이 (다른 사람 풀이 보고)
function solution(priorities, location) {
// {index: 0, priority: 2} 형식의 객체들로 만들어서 arr 라는 배열에 넣음.
var arr = priorities.map((priority, index) => {
return {
index: index,
priority: priority,
};
});
var queue = [];
while (arr.length > 0) {
//가장 앞에 있는 문서를 꺼낸다. => firstEle
var firstEle = arr.shift();
// 남은 배열에서 firstEle의 중요도보다 큰 게 하나라도 있는지(some)
// => hasHightPriority (false 면, firstEle가 최고 중요도라는 의미)
var hasHighPriority = arr.some((ele) => ele.priority > firstEle.priority);
//true 이면, arr 의 맨 뒤로 보냄.
if (hasHighPriority) {
arr.push(firstEle);
// false 이면 queue 에 넣음.
} else {
queue.push(firstEle);
}
}
return queue.findIndex((queueEle) => queueEle.index === location) + 1;
}
- arr를 한번 다 돌고나서 나온 queue에는 최고 중요도인 것들만 있음. 여러개 있을 수 있음을 고려해야함! (최고 중요도가 9라고 할 때, 중요도9인 원소가 여러개일 수 있음) 나는 이 부분을 고려하지 못했다. (너무 단순하게 생각했음..ㅜ)
- 그러므로 queue 에서 내가 관심있는 특정 문서(location)와 index가 일치하는 원소의 인덱스를 찾는다.
여기서 element.index는 처음 입력받았을 때의 index이고, findIndex로 찾는 index는 queue 안에서의 인덱스이다.
- findIndex로 queue 내에서의 인덱스를 찾고 + 1 해줌
최고 중요도가 9이고 중요도 9짜리 원소가 5개 있을 때, 나는 인덱스가 3인 원소를 찾고 있다면(location:3을 찾고 있음)
element.index 가 3인 원소를 찾는 것이고, findIndex를 통해 중요도가 9인 원소만 모아둔 queue 내에서의 index를 찾는다.
- 몇번째로 요청이 처리됐는지는 + 1을 해줘야 함. 만약 내가 찾는 문서는 queue 내에서 index 가 2라면, 3번째로 인쇄된 것이므로 2에 +1 해준 것이 답임.
'알고리즘' 카테고리의 다른 글
[프로그래머스/자바스크립트] 정렬_K번째수 (0) | 2021.11.19 |
---|---|
[프로그래머스/자바스크립트] 스택/큐_기능개발 (0) | 2021.11.09 |
[프로그래머스/자바스크립트] 해시 - 베스트앨범 (0) | 2021.11.08 |
[프로그래머스/자바스크립트] 해시 - 위장 (0) | 2021.11.04 |
[프로그래머스/자바스크립트] 해시 - 완주하지 못한 선수 (0) | 2021.11.03 |
댓글