Blue___
코딩배우는 학생🌎
Blue___
전체 방문자
오늘
어제
  • 코딩배우는 학생🧀 (242)
    • Algorithms (145)
      • BOJ[Java] (107)
      • Programmers[Java] (32)
      • Coding_Contest (3)
    • Web (22)
      • .NET Core C# (2)
      • Java (1)
      • Oracle SQL (7)
      • Web-ProJect (3)
      • Error처리 (1)
      • Web지식 (4)
      • Javascript (1)
      • Vue (3)
    • Git (4)
    • Java_beginner(Repl.it) (55)
      • Auto-Graded-Course(AP CS A) (54)
    • 프로젝트 직딩일기 (3)
    • Hanyang_Assignment (0)
    • 이모저모 (4)
      • 잡담 (1)
      • 2021 오픈소스 컨트리뷰터 아카데미 (1)
      • DDD - 6기! (1)
    • 북리뷰 (1)
      • 리팩토링 2판 (1)
      • 클린코드 (0)

블로그 메뉴

  • 🐰GITHUB
  • ☘️포트폴리오
  • 🌸MBC개발_투표 2022
  • 🍭MBC_APP

공지사항

인기 글

태그

  • programmers
  • auto-graded course
  • 자바
  • repl.it
  • 프로그래밍
  • Java
  • 프로그래머스
  • 알고리즘
  • REPL
  • java basic
  • 코딩
  • 코딩배우는학생
  • 코딩배우는 학생
  • coding
  • Java tutorial
  • algorithm
  • 백준
  • 레플릿
  • Bakjoon
  • AP CS A

최근 댓글

최근 글

티스토리

hELLO
Blue___

코딩배우는 학생🌎

Algorithms/Programmers[Java]

[Programmers level 3] 이중우선순위 큐 Javascript

2022. 3. 21. 17:22
문제 설명

 

이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다.

명령어수신 탑(높이)

I 숫자 큐에 주어진 숫자를 삽입합니다.
D 1 큐에서 최댓값을 삭제합니다.
D -1 큐에서 최솟값을 삭제합니다.

이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요.

제한사항

  • operations는 길이가 1 이상 1,000,000 이하인 문자열 배열입니다.
  • operations의 원소는 큐가 수행할 연산을 나타냅니다.
    • 원소는 “명령어 데이터” 형식으로 주어집니다.- 최댓값/최솟값을 삭제하는 연산에서 최댓값/최솟값이 둘 이상인 경우, 하나만 삭제합니다.
  • 빈 큐에 데이터를 삭제하라는 연산이 주어질 경우, 해당 연산은 무시합니다.

 

입출력예

 

operations return
["I 16","D 1"] [0,0]
["I 7","I 5","I -5","D -1"] [7,5]

입출력 예 설명

 

16을 삽입 후 최댓값을 삭제합니다. 비어있으므로 [0,0]을 반환합니다.
7,5,-5를 삽입 후 최솟값을 삭제합니다. 최대값 7, 최소값 5를 반환합니다.

 

 

 

풀이

 

단순 배열로 풀면 쉬운 문제.

시간 복잡도 O(N), 힙 사용하면 O(logN)가능 하긴 한데 직접 힙 PriorityQueue 구현체 구현하기가 좀 ㅇㅅㅇ

 

function solution(operations) {
    const pq = [];
    
    operations.forEach(operation => {
        let [command, num] = operation.split(' '); //I. 16
        num = parseInt(num);
        switch(command){
            case 'I':
                pq.unshift(num);
                break;
            case 'D':
                if(pq.length == 0) break;
                if(num ==1) pq.sort((a,b) => b - a);
                else if(num == -1) pq.sort((a,b) => a - b);
                pq.shift();
                break;
        }
    });

    if(!pq.length) return [0,0];

    pq.sort((a,b) => b - a);
    return [pq[0], pq[pq.length - 1]];
}

 

반응형
저작자표시 (새창열림)

'Algorithms > Programmers[Java]' 카테고리의 다른 글

[Programmers level3] 섬 연결하기(javascript) : 그루스칼 알고리즘  (0) 2022.03.22
[Programmers Level 3] 디스크 컨트롤러 (javascript)  (0) 2022.03.21
[Programmers] 기능개발 [Java]  (0) 2020.09.10
[Programmers] 가장 큰 수[Java]  (0) 2020.07.27
[Programmers] 실패율(2019 KAKAO BLIND RECRUITMENT)[Java]  (1) 2020.07.24
    'Algorithms/Programmers[Java]' 카테고리의 다른 글
    • [Programmers level3] 섬 연결하기(javascript) : 그루스칼 알고리즘
    • [Programmers Level 3] 디스크 컨트롤러 (javascript)
    • [Programmers] 기능개발 [Java]
    • [Programmers] 가장 큰 수[Java]
    Blue___
    Blue___
    완전 연소한 불은 재를 남기지않는다 : 코딩배우는학생 🌎

    티스토리툴바