프로그래머스 #JavaScript - 프린터

SSO·2020년 1월 26일
0

프로그래머스 Lv2

목록 보기
2/46

문제

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

풀이

function solution(priorities, location) {
    var answer = 0;
    var queue = [];
    var tIndex = location;
    
    while(priorities.length>0){ // 중요도 높은 게 뒤에 있음
        if(priorities.some(num=> num > priorities[0])){
            priorities.push(priorities[0]);
            priorities.shift(priorities[0]);
            if(tIndex===0){
                   tIndex = tIndex + priorities.length-1;
            }else{
                 tIndex = tIndex-1;
            }
        }else{ //맨 앞이 가장 중요도 높음
            priorities.shift(priorities[0]);
              answer = answer+1;
            if(tIndex === 0){
                break;
            } else {
                tIndex = tIndex-1;
            }
        }
    }
    
    return answer;
}
function solution(priorities, location) {
    let targetIndex = location; // 중요한 부분***
    let answer = 0;
    // let len = priorities.length; // Q: 왜 len으로 대신하면 안되지? => 아래 logic에 따르면 priorities길이가 계속 변해야 하니까
    
    while (priorities.length> 0) {
        first = priorities.shift();
        if (priorities.some((value, index) => value > first)) {
            priorities.push(first);
        } else {
            answer = answer + 1;
            if (targetIndex === 0) {
                break;
            }
        }

        if (targetIndex === 0) {
            targetIndex = priorities.length - 1; //Q: 여기 왜 len으로 대체 불가? => 위에서 len을 한번 선언하고나서는 아래 변화가 반영되지 않으니까..?
        } else {
            targetIndex = targetIndex - 1;
        }
    }
    return answer;
}

더 생각해보기

처음접근
-> obj 형태로 location을 기억해서 max와 비교하려함 -> some()생각못함.

  1. 왜 for대신 while을 사용해야 하는지. while(계속할 조건).
  2. array.some method
  3. targetIndex의 설정 및 변화
  4. obj로 location기억해서 코드 다시 짜보기 => 참고

참고사항

#queue
array.some()
우선순위가 있는 queue 참고

profile
happy

0개의 댓글