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

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO
Blue___

코딩배우는 학생🌎

PriorityQueue : 우선순위 큐(Java)
Algorithms/BOJ[Java]

PriorityQueue : 우선순위 큐(Java)

2021. 7. 20. 21:15

 

 

 

 

우선순위 큐(Priority Queue)



BOJ 11656 기본문제를 보다가 우선순위 큐를 적용해서 풀어보았다. 쉽게도 풀 수 있지만, 요즘에는 최대한 시간복잡도를 줄이면서 풀도록 노력하고 있다. N의 최댓값이 1000이고 O(N2)이라 시간초과가 나지 않을거 같긴한데 PriorityQueue로 O(N)으로 순서를 직접적으로 정렬하면서 진행한다면 훨씬 수월할 거라 판단. 구현을 시작했다. 

 

접미사 배열은 문자열 S의 모든 접미사를 사전순으로 정렬해 놓은 배열이다.
baekjoon의 접미사는 baekjoon, aekjoon, ekjoon, kjoon, joon, oon, on, n 으로 총 8가지가 있고, 이를 사전순으로 정렬하면, aekjoon, baekjoon, ekjoon, joon, kjoon, n, on, oon이 된다.
문자열 S가 주어졌을 때, 모든 접미사를 사전순으로 정렬한 다음 출력하는 프로그램을 작성하시오.

 

일단 우선순위 큐의 성질에 대해 알 필요가 있는데, 자료구조 안의 인스턴스에 중요도를 매기고 그에 따라 트리가 구성되는 형식이다. 때문에 queue에 offer할 때마다 미리 지정해둔 우선순위에 따라 정렬되기 때문에 반복문을 중첩으로 사용하지 않아도 된다.

 

ex 최소힙 트리

 

 

 

 

풀이




어렵지 않게 Queue를 사용하면 O(n)으로 해결 가능하다.
package com.company;
import java.io.*;
import java.util.*;

public class Main {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    public static void main(String[] args) throws IOException
    {
        String input = br.readLine();
        
        //String에 사전순 정렬 Comp 우선도를 지정해준다.
        PriorityQueue<String> pq = new PriorityQueue<String>(Comp);
        int length = input.length();

        for(int i=0;i<length;i++)
        {
            String tmp= input.substring(i);
            pq.offer(tmp);
        }
        //flush!
        print(pq);     
    }
    private static Comparator<String>Comp = new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            // TODO Auto-generated method stub
            return o1.compareTo(o2);
        }
    };
    public static void print(PriorityQueue<String> pq) throws IOException
    {
        while(!pq.isEmpty())
        {
            bw.write(pq.poll()+"\n");
        }
        bw.flush();
    }
}

 

 

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

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

[BOJ/16929번] Two Dots (java) : 깊이우선탐색  (0) 2021.07.28
[BOJ/4963번]섬의개수(java) : DFS  (0) 2021.07.27
[백준/5052번] 전화번호 목록(NCPC 2007)[Java]  (0) 2020.03.17
[백준/2959번] 거북이(COCI 2008/2009) [Java]  (1) 2020.03.13
[백준/1431번] 시리얼 번호 [Java]  (0) 2020.03.13
    'Algorithms/BOJ[Java]' 카테고리의 다른 글
    • [BOJ/16929번] Two Dots (java) : 깊이우선탐색
    • [BOJ/4963번]섬의개수(java) : DFS
    • [백준/5052번] 전화번호 목록(NCPC 2007)[Java]
    • [백준/2959번] 거북이(COCI 2008/2009) [Java]
    Blue___
    Blue___
    완전 연소한 불은 재를 남기지않는다 : 코딩배우는학생 🌎

    티스토리툴바