728x90

문제


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

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

 

코드


function solution(priorities, location) {
    let max;
    let count = 0;

    while(true) {
        max = Math.max(...priorities); //우선순위가 제일 높은 수 저장
        let first = priorities.shift(); //우선순위 배열의 제일 앞 요소를 빼내기

        if (first !== max) priorities.push(first); //제일 앞 요소가 max값이 아니면 push를 통해 우선순위 배열의 제일 마지막으로 보내기
        else { //제일 앞 요소가 max값이면
            count++; //내가 찾는게 몇 번째로 출력되는지 반환하기 위해 +1씩 해주기
            if (location === 0) return count; //위의 과정을 반복하다가 내가 찾는 것이 제일 앞 요소가 되었을때, 계속 +1 해오던 count 반환
        }
        location--; //내가 찾는 요소가 제일 앞 요소가 될 때까지 location 줄여나가기

        if (location === -1) location = priorities.length - 1; //location을 줄여나가다가 idx가 0보다 작아지게 되면 배열의 가장 끝 idx로 보내기
    }
}

 

후기


  • 우선 이 문제는 처음에 제시된 배열의 순서를 지켜야 하기 때문에 정렬을 해서는 안된다. 어떻게 순서를 유지하며 max값을 찾고, 내가 원하는 요소의 위치를 찾을 수 있을까 고민하다가 스택/큐 문제답게 자바스크립트에서 제공하는 shift(), push() 함수를 적절하게 사용하면 나름 쉽게 풀 수 있는 문제였다
  • 이 문제를 통해 알게된 건 자바스크립트의 배열 내 최대값, 최소값 찾는 법으로 Math.min(), Math.max() 함수를 사용한다는 것이다
  • 사용법 : Math.max.apply(null, 배열이름) or Math.max(...배열이름) >> 두가지 방법으로 사용가능하다

+ Recent posts