Coding Test/Programmers Level 3

이중우선순위큐

pathas 2022. 3. 29. 20:49

문제

https://programmers.co.kr/learn/courses/30/lessons/42628

 

코딩테스트 연습 - 이중우선순위큐

 

programmers.co.kr


코드

function solution(operations) {
    const answer = [];
    
    for(let i = 0; i < operations.length; i++){
       const [command, num] = operations[i].split(' ');
       
        if(command === 'I'){
            answer.push(Number(num));
            answer.sort((a, b) => Number(b) - Number(a));
        }
        if(command === 'D'){
            if(num === '1') answer.shift();
            else answer.pop();
        }
    }
    
    if(answer.length === 0) return [0, 0];
    
    return [answer[0], answer[answer.length - 1]];
}

풀이

  1. 각각의 연산을 수행하기 위해 operations 를 순환
  2. operations 는 '명령어 숫자' 배열이므로 ' '(띄어쓰기)를 기준으로 명령어와 숫자를 분리
  3. 명령어가 I 인 경우에는 answer 에 num 을 숫자 타입으로 바꿔서 넣어줌
  4. 명령어 D 는 최솟값, 최댓값을 기준으로 연산을 지시하기 때문에 answer 에 요소를 넣어준 후 내림차순 정렬
  5. 명령어가 D 이면서 숫자가 '1' 인 경우 최댓값(내림차순 정렬이므로 맨 앞의 값)을 제거하고, '-1' 인 경우 최솟값을 제거 
  6. 만약 연산 결과 answer 가 비어있다면 최댓값과 최솟값이 모두 0 이므로 [0, 0] 리턴
  7. 그 외의 경우에는 내림차순 정렬되어 있는 answer 의 0 인덱스의 값과 마지막 인덱스의 값을 배열에 담아 리턴