ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 이중우선순위큐
    Coding Test/Programmers Level 3 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 인덱스의 값과 마지막 인덱스의 값을 배열에 담아 리턴 

    'Coding Test > Programmers Level 3' 카테고리의 다른 글

    베스트 앨범  (0) 2022.03.27

    댓글

Designed by Tistory.