Algorithm

[Algo] 백준 11656 접미사 배열 JAVA

조핑구 2024. 5. 7. 16:25

문제 바로가기 : https://www.acmicpc.net/problem/11656

메모리 : 19480KB

시간 : 208ms

언어 : Java 11


풀이

str을 뒤에서부터 탐색하며 접미사를 만들어 저장한 후 사전순으로 정렬해 출력한다.
여러가지 풀이를 시도해 보았다!

Array를 이용한 풀이

19172KB 208ms

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.TreeMap;
import java.util.Map.Entry;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        String str = br.readLine();
        String[] arr = new String[str.length()];
        String tmp = "";
        for (int i = str.length() - 1; i >= 0; i--) {
            tmp = str.charAt(i) + tmp;
            arr[i] = tmp;
        }
        Arrays.sort(arr);
        for (int i = 0; i < str.length(); i++) {
            sb.append(arr[i]).append('\n');
        }
        System.out.print(sb);
    }
}

List를 이용한 풀이

19480KB 208ms

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        List<String> list = new ArrayList<>();
        String str = br.readLine();
        String tmp = "";
        for (int i = str.length() - 1; i >= 0; i--) {
            tmp = str.charAt(i) + tmp;
            list.add(tmp);
        }
        Collections.sort(list);
        for (int i = 0; i < list.size(); i++) {
            sb.append(list.get(i)).append('\n');
        }
        System.out.print(sb);
    }
}

TreeSet을 이용한 풀이

19356KB 212ms

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.TreeSet;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        TreeSet<String> set = new TreeSet<>();
        String str = br.readLine();
        String tmp = "";
        for (int i = str.length() - 1; i >= 0; i--) {
            tmp = str.charAt(i) + tmp;
            set.add(tmp);
        }
        for (String i : set) {
            sb.append(i).append('\n');
        }
        System.out.print(sb);
    }
}

TreeMap을 이용한 풀이

19128KB 216ms

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.TreeMap;
import java.util.Map.Entry;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        TreeMap<String, Integer> map = new TreeMap<>();
        String str = br.readLine();
        String tmp = "";
        for (int i = str.length() - 1; i >= 0; i--) {
            tmp = str.charAt(i) + tmp;
            map.put(tmp, i);
        }
        for (String i : map.keySet()) {
            sb.append(i).append('\n');
        }
        System.out.print(sb);
    }
}