문제
https://school.programmers.co.kr/learn/courses/30/lessons/42587
풀이
function solution(priorities, location) {
let count = 1;
let queue = priorities.slice();
while (true) {
const max = Math.max(...queue);
const now = queue.shift();
// 반복
// 1. now 가 max와 같은 경우
if (now === max) {
// location 이 0이라면 바로 카운트를 리턴
if (location === 0) return count;
else count++;
}
// 2. now 가 max 와 다른 경우
// - now 를 queue 에 push
else {
queue.push(now);
}
// 순서가 줄었으므로 location 감소
location--;
// 0번째 차례에서 감소되었다면 음수이기 때문에, 순서를 다시 맨 뒤로 초기화
if (location < 0) {
location = queue.length - 1;
}
}
}
- 스택/큐 자료구조를 활용해서 풀 수 있는 문제
- 첫 번째 요소를 shift 하여 나머지 요소와 비교 후에, 우선순위가 높은게 하나라도 존재할 경우 다시 배열 마지막에 push
- 이 때 순서를 추적해야 하는데, 순서를 추적하기 위하여 순서가 변경될 때마다 location 값을 감소시키고, 하나라도 max 값과 일치하여 출력되는 순간 카운트를 증감하여 이를 리턴했다.
다른 사람의 풀이
// 다른 사람의 풀이
function ref(priorities, location) {
// 내가 추적하려는 task 여부와 priority 값을 넣어 객체로 변경
var list = priorities.map((t, i) => ({
my: i === location,
val: t,
}));
var count = 0;
while (true) {
// 첫번째 요소 특정
var cur = list.splice(0, 1)[0];
// some 메서드로 하나라도 우선순위가 높은 값이 있는지 찾는다.
if (list.some(t => t.val > cur.val)) {
// 우선순위가 더 높은 것이 있는 경우 배열 맨 뒤로 push
list.push(cur);
}
// 아닌 경우 카운트를 증감
else {
count++;
// 만약 현재 task 가 내가 뽑으려는 task 라면 리턴
if (cur.my) return count;
}
}
}
- 내가 추적중인 요소를 특정짓기 위해 map 메서드를 활용해 객체로 프로퍼티를 생성해줌
- max 값을 찾는게 아니고 some 메서드를 활용해 조건과 일치하는 요소가 있는지 찾아주고 있다.
'Algorithm & 자료구조 > 알고리즘 w.JavaScript' 카테고리의 다른 글
[알고리즘 JS] 귤 고르기(프로그래머스 Lv.2) (0) | 2023.01.31 |
---|---|
[알고리즘 JS] 타겟 넘버 (프로그래머스 Lv.2) (0) | 2023.01.31 |
[알고리즘 JS] n^2 배열 자르기 (프로그래머스 Lv.2) (0) | 2023.01.31 |
[알고리즘 JS] 신고 결과 받기 (프로그래머스 Lv.1) (0) | 2023.01.17 |
[알고리즘 JS] 햄버거 만들기 (프로그래머스 Lv.1) (3) | 2023.01.16 |