프로그래머스 - 프린터

문제

현재 대기목록에 있는 문서의 중요도가 순서대로 담긴 배열 priorities와 내가 인쇄를 요청한 문서가 현재 대기목록의 어떤 위치에 있는지를 알려주는 location이 매개변수로 주어질 때, 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 return 하도록 solution 함수를 작성해주세요.

문제 설명

priorities배열에서 처음 값과 최대값을 비교하여 처음 값이 최대값보다 크거나 같은 경우 카운트하고 아닌경우 배열에서 가장뒤에 값을 위치 시킨다.

의사코드

  1. count, max 변수와 priorities배열을 복사하여 저장할 변수 arr을 생성한다.
  2. location이 0보다 작을때까지 while문 루프를 돈다
  3. 루프문 안에서 max값을 구해주고 arr 배열의 첫번째요소가 max보다 작은지 체크한다.
  4. 만약 작다면 그 값을 배열에서 빼주고 다시 배열의 뒤에 추가해준다 이때 location이 0인지 체크 하고 0이라면 그 값을 arr길이 -1로 설정해준다 아니라면 location에 1을 빼준다.
  5. 만약 arr의 첫번째 값이 max보다 크다면 첫번째 값을 배열에서 빼주고 count++, location--해준다.
  6. return count

Solution

function solution(priorities, location) {
    let max;
    let count = 0
    let arr = priorities.slice()
    while(location >= 0){
        max = Math.max(...arr)
        if(arr[0] < max){
            if(location===0){
              location = arr.length-1  
            }else{
                location--
            }
            arr.push(arr.shift())
        }else{
            arr.shift()
            location--
            count+=1
        }
    }
    return count
}

좋은 웹페이지 즐겨찾기