[프로그래머스] 프린터 (JavaScript)

SOLEE_DEV·2021년 4월 13일
0

Javascript

목록 보기
9/19
  1. 처음 접근 방식
  • idx, val을 저장하는 obj로 변환
function solution(priorities, location) {
    let idx = 0;
    let cnt = 0;
    
    priorities = priorities.map((a) => { 
        return {val : a, idx : idx++};
    })
    
    while(true) {
        if(priorities.length === 0) break;
        
        const sorted = priorities.slice().sort((a,b) => b.val-a.val)
        const shiftedValue = priorities.shift()
        
        if(shiftedValue.val === sorted[0].val) {
            cnt++;
            if(shiftedValue.idx === location) {
                break;
            }
        }
        if(shiftedValue.val !== sorted[0].val) {
            priorities.push(shiftedValue)
        }
    }
    
    return cnt;
}

=> while문 돌 때 마다 계속 sort 해줘야되는 단점이 있음

  1. 최종 코드
function solution(priorities, location) {
    let answer = 0
    let index = location
    
    while(priorities.length > 0) {
        if(priorities.some(num => num > priorities[0])) {
            priorities.push(priorities[0])
            priorities.shift()
            
            if(index === 0) {
                index = priorities.length - 1
            } else {
                index--
            }
        } else {
            priorities.shift()
            answer++ 
          
            if(index === 0) {
                break;
            } else {
                index--
            }   
        }
    }
    
    return answer;
}

구글링하다가 완전 좋은 함수를 알아냈다... some으로 모든 요소들 순회하면서 조건에 충족해주는지 판별해주는 함수!

여기다가 처음 location의 위치를 저장해놓은 index라는 변수를 만들어서 배열이 바뀔 때마다 값을 변화시켜주면 답이 나온다

profile
Front-End Developer

0개의 댓글