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