이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

[백준] 7662 이중 우선순위 큐 -Java

  • 2022.02.16 09:10
  • Algorithm/Baekjoon
반응형

 

 

 

하나는 최소 큐, 하나는 최대 큐로 정렬되어있는 우선순위 큐 두 가지를 선언해 풀었었는데, 시간 초과가 나왔다.

두 가지 큐를 사용하므로 최소 큐에서 값을 제거할 때 최대 큐에서도 같이 값을 제거해줘야 하는데 여기서 poll함수와 remove함수를 함께 쓰게 되서 시간복잡도가 O(N)이 나와 시간초과가 발생하게 된다.

 

poll함수에서는 문제가 없지만, remove함수를 사용할 때는 순차적으로 접근해서 발생하는 문제다.

 

 

문제를 해결하기 위해 TreeMap자료구조를 사용했다.

객체를 선언하면 자동으로 정렬이 되는 자료구조인데, TreeMap을 사용해 키 값을 기준으로 트리를 정렬시켜 저장하고 트리 형태로 빠르게 탐색을 진행할 수 있다.

 

 

Java

 

맞게 풀었는데 계속 틀렸다고 하길래.. 다시 보니 StringTokenizer를 잘못 사용하고 있었다.

 

import java.util.*;
import java.io.*;

public class Main {

  public static void main(String[] args) throws IOException {
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      StringBuilder sb = new StringBuilder();
      
      int N = Integer.parseInt(br.readLine());

      for(int i=0; i<N; i++){
        int k = Integer.parseInt(br.readLine());
        TreeMap<Integer, Integer> tm = new TreeMap<>();

        for(int j=0; j<k; j++){
          StringTokenizer st = new StringTokenizer(br.readLine(), " ");
          char command = st.nextToken().charAt(0);
          int n = Integer.parseInt(st.nextToken());

          if(command == 'I'){
            int value = n;                      
            tm.put(value, tm.getOrDefault(value, 0)+1);          

          }else if(command == 'D'){

            if(tm.size()==0){
              continue;
            }
            
            if(n==1){
              
              int maxkey = tm.lastKey();
              if(tm.get(maxkey) == 1){
                tm.remove(maxkey);
              }else{
                tm.put(maxkey, tm.get(maxkey)-1);
              }

            }else if(n==-1){

              int minkey = tm.firstKey();
              if(tm.get(minkey)== 1){
                tm.remove(minkey);
              }else{
                tm.put(minkey, tm.get(minkey)-1);
              }
            }

            
          }
        }

        if(tm.size()==0){
          sb.append("EMPTY").append("\n");    
        }else{
          sb.append(tm.lastKey()).append(" ").append(tm.firstKey()).append('\n');
        }
   

          
     }

        System.out.println(sb);



      }
    }

 

 

반응형

'Algorithm > Baekjoon' 카테고리의 다른 글

[백준] 22252 정보 상인 호석 -Java  (0) 2022.02.16
[백준] 2075 N번째 큰 수 -Java / Python  (0) 2022.02.16
[백준] 4358 생태학 -Java / Python  (0) 2022.02.15
[백준] 17298 오큰수 -Java / Python  (0) 2022.02.14
[백준] 1991 트리 구조 -Java / Python  (0) 2022.02.14

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [백준] 22252 정보 상인 호석 -Java

    [백준] 22252 정보 상인 호석 -Java

    2022.02.16
  • [백준] 2075 N번째 큰 수 -Java / Python

    [백준] 2075 N번째 큰 수 -Java / Python

    2022.02.16
  • [백준] 4358 생태학 -Java / Python

    [백준] 4358 생태학 -Java / Python

    2022.02.15
  • [백준] 17298 오큰수 -Java / Python

    [백준] 17298 오큰수 -Java / Python

    2022.02.14
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (675) N
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (142)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (17)
    • 👥 모각코 (8)
    • 💬 기록 (7) N
    • 📚 공부 (5)
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바