[자바스크립트] 프로그래머스 프린터

hoonie·2021년 8월 17일
0

알고리즘

목록 보기
15/15

문제 url -
https://programmers.co.kr/learn/courses/30/lessons/42587?language=javascript

function solution(priorities, location) {
    var answer = 0;
    //location 인덱스에 해당하는 value에 is_me true 할당
    let new_list = priorities.map((value,idx)=>{
        let is_me = location === idx ? true : false;
        return {value,is_me}
    })
    
    let order = 0;
    
    let result = false;
    while(true) {
        //배열 맨 앞 씩 잘라가면서 그거하고 계속 비교
        let shiftedThing = new_list.shift();
        //만약 잘라낸 객체의 value가 list value보다 작다면 잘라낸 객체는 다시 맨뒤로보내기
        if(new_list.some((element)=>element.value > shiftedThing.value)) {
            new_list.push(shiftedThing)
        }
        //위 조건문에 해당하지 않으면 order 카운트 올림
        //잘라낸게 is_me true면 order 카운트 반환
        else {
            order++
            if(shiftedThing.is_me) return order
        }
    }
}

위 식에 입출력 예의 두번째를 대입하여 계산해보면 이런식이 되겠습니다

  1. [1,1,9,1,1,1] 의 첫번째 원소인 1에 is_me : true가 할당
  2. shift 메서드로 인해 배열으 가장 첫번째 원소 잘라내기
  3. 첫번째 원소의 값이 1이고 new_list 배열엔 9가 있으므로 else문에 들어가지 못하고 1은 다시 new_list의 마지막에 push 됨
  4. 위의 과정을 반복

1 1 9 1 1 1
1 9 1 1 1 1
9 1 1 1 1 1
1 1 1 1 1 -> order++
1 1 1 1 -> order++
1 1 1 -> order++
1 1 -> order++
1 -> order++ , is_me = true 원소이므로 order return

0개의 댓글