본문 바로가기

Algorithm/Baekjoon

[Baekjoon] 백준 11656번: 접미사 배열 (JAVA)

728x90

문제 11656

 

11656번: 접미사 배열

첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000보다 작거나 같다.

www.acmicpc.net

[ 문제 풀이 ]

문자열을 앞에서부터 하나씩 잘라서 뒷부분을 ArrayList<>에 저장한 후, 정렬해주면 됩니다. String 클래스의 substring()을 활용하여 인덱스를 매개변수로 해서 차례대로 접미사들을 구합니다.

Collections.sort()로 ArrayList<>를 정렬해준 후, 출력해줍니다.

ArrayList<> 대신, String[]을 활용하여 배열에 저장해주는 방법도 있습니다. 이 경우에는 정렬할 때 Arrays.sort()을 사용하면 됩니다.

[ 코드 ]

1) ArrayList<> 사용

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String str = br.readLine();
        int str_len = str.length();

        ArrayList<String> suffixes = new ArrayList<>();
        for (int i = 0; i < str_len; i++) {
            suffixes.add(str.substring(i));
        }

        Collections.sort(suffixes);
        for (String s: suffixes) {
            bw.write(s);
            bw.newLine();
        }
        bw.flush();
    }
}

 

2) String[] 사용

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String str = br.readLine();
        int str_len = str.length();

        String[] suffixes = new String[str_len];
        for (int i = 0; i < str_len; i++) {
            suffixes[i] = str.substring(i);
        }

        Arrays.sort(suffixes);
        for (String s: suffixes) {
            bw.write(s);
            bw.newLine();
        }
        bw.flush();
    }
}

728x90