코딩테스트

[JS] 힙(Heap) > 이중우선순위큐

차차한 2022. 9. 21. 09:00

function solution(operations) {
    var answer = [];

    for(var i = 0; i < operations.length; i++){
        
        var point = operations[i].slice(0,1);
        var num = parseInt(operations[i].slice(2));
        
        switch(point){
                
            case "I" : answer.push(num);      
                       break;
                
            case "D" : if(num == 1){
                            answer.sort((a,b)=>b-a);
                            answer.shift();       
                        }else{
                            answer.sort((a,b)=>a-b);
                            answer.shift();
                        }  
                        break;        
        } 
    }
    answer.sort((a,b)=>a-b);
    
    return answer.length == 0 ? [0,0] : [answer[answer.length-1],answer[0]];
}

매개변수 배열의 길이만큼 반복을 돌리면서 주어진 조건을 처리했다.

변수 point에는 I 또는 D를 담고, num에는 숫자만 잘라내 담아줬다. 

switch문을 돌려서 point가 I면 num을 배열에 담아주고, D인 경우는 num이 1인 경우, -1인 경우로 나눠 처리를 해줬다.

D 1인 경우에는 배열의 최대값을 없애야하기에 내림차순으로 정렬을 하고 shift를 해 가장 첫 번째 값을 삭제했고, 그 반대인 경우는 오름차순으로 정렬해 shift를 해줬다.

모든 조건을 처리한 후에는 배열의 최대값과 최소값을 알아내줘야하니 다시 오름차순으로 정렬을 하고, 

배열의 길이가 0이면 [0,0]을 리턴, 아니라면 [최대값, 최소값]을 리턴해준다.