[코테] 문제풀기 #2

Yuno·2021년 6월 27일
1
post-thumbnail

구현 위주의 문제

프린터

프린터는 일반적으로, 요청된 순서대로 인쇄합니다.
중요한 문서는 먼저 인쇄하기 위해, 각 문서에 중요도가 존재합니다.
대기목록 문서의 중요도가 담긴 배열 priorites와 요청한 문서의 위치 location을 가지고,
내가 요청한 문서가 몇 번째로 인쇄되는지 반환합니다.

  1. 인쇄 대기목록의 가장 앞의 문서를 꺼냅니다.
  2. 나머지 인쇄 대기목록에서 중요도가 높은 문서가 하나라도 존재하면, 맨 뒤로 보냅니다.
  3. 중요도가 높은 문서가 없다면, 인쇄합니다.

풀이방법

대기목록에 담긴 중요도와, 내 문서를 찾기 위한 인덱스를 가지는 객체로 배열을 정의합니다.
인쇄 순서에 따라 print 배열에 인덱스를 담고, 내 문서가 담기면 종료하고 배열의 길이를 반환합니다.

function solution(priorities,location) {
    const print = [];
    const input = Array.from(priorities, (priority,index)=>({priority,index}) );
    
    while(!print.includes(location)) {
        const now = input.shift();
        const moreImportant = elem => elem.priority > now.priority;
        
        if(input.some(moreImportant)) input.push(now);
        else print.push(now.index);
    }
    
    return print.length;
}

현재 대기목록 배열, input에 우선순위와 인덱스를 담았습니다.
배열에 조건에 해당하는 요소가 있는지 확인하기 위한 Array.prototype.some() 함수를 사용합니다.
내 문서가 인쇄되면 반복을 종료하고, 몇 번째로 인쇄되었는지 반환합니다.

profile
web frontend developer

0개의 댓글