[JavaScript][Programmers] 타겟 넘버

조준형·2021년 7월 5일
0

Algorithm

목록 보기
15/142
post-thumbnail

🔎 타겟 넘버

❓ 문제링크

https://programmers.co.kr/learn/courses/30/lessons/42587

📄 제출 코드

// 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
// 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
// 3. 그렇지 않으면 J를 인쇄합니다.
function solution(priorities, location) {
    let arr = [];
    // console.log(`location : ${location}, priorities : ${priorities}`);
    // console.log(`length : ${priorities.length}`);
    while (location != -1) {
        let max = Math.max(...priorities);
        // console.log(`max : ${max}`);
        // console.log(`length : ${priorities.length}`);
        if (priorities[0] != max) {
            // console.log(`if`);
            priorities.push(priorities.shift());
            location == 0 ? location = priorities.length - 1 : location -= 1;
            // console.log(`location : ${location}, priorities : ${priorities}`);
            // console.log(`arr : ${arr}`);
            // console.log();
        } else { // priorities[0] == max
            // console.log(`else`);
            arr.push(priorities.shift());
            location-=1;
            // console.log(`arr : ${arr}, priorities : ${priorities}`);
            // console.log(`loc : ${location}`);
            // console.log();
        }
    }
    arr.length;
    return arr.length;
}

let priorities = [1, 1, 9, 1, 1, 1];
let location = 0;
console.log(solution(priorities, location));

이번 문제는 처음에 최대값이 젤앞에 올 때 indexOf로 초기의 priorities[location]을 찾을려고 했다가 두번째 케이스에서 막혔었다.
생각 해보니까 제일 앞에 오고 거기서 찾으려하면 두번째 케이스처럼 같은 값이 있는 경우 제일 앞에껄 찾을 거기 때문에 당연하다.

어떻게 하지 고민을 하다가 결국엔 다른 사람의 코드를 참고하였다.
먼저 priorities의 최대값을 저장해두고, 첫번째가 최대값인 경우. 즉 인쇄하는 경우에
인쇄된 것을 저장할 배열 arr에 push한다.
최대값이 아닌 경우, 처음 위치를 젤 뒤로 보내고, location이 0이면 해당상태의 (배열의 길이-1)으로 변경한다.
(최대값이 아니므로 출력이 안되기 때문!)
location이 0이아니면 한칸 당겨질테니 location을 -1한다.

최종적으로 while문을 벗어나면, arr의 마지막에 원하던 location의 값이 있을 테니 arr의 길이를 출력하면 답이 나온다.

📘 참고

https://hianna.tistory.com/487
질문게시판에서 참고한 코드

profile
깃허브 : github.com/JuneHyung

0개의 댓글