본문 바로가기

문제 풀이/Baekjoon

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

문제 출처 - Baekjoon Online Judge

문제는 여기

 

11656번: 접미사 배열

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

www.acmicpc.net

[문제] 

접미사 배열은 문자열 S의 모든 접미사를 사전순으로 정렬해 놓은 배열이다.

baekjoon의 접미사는 baekjoon, aekjoon, ekjoon, kjoon, joon, oon, on, n 으로 총 8가지가 있고, 이를 사전순으로 정렬하면, aekjoon, baekjoon, ekjoon, joon, kjoon, n, on, oon이 된다.

문자열 S가 주어졌을 때, 모든 접미사를 사전순으로 정렬한 다음 출력하는 프로그램을 작성하시오.

[입력]

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

[출력]

첫째 줄부터 S의 접미사를 사전순으로 한 줄에 하나씩 출력한다.

 

 


[풀이]

1. 입력받은 문자를 substring으로 잘라 배열에 담아준다.

2. 담긴 배열을 정렬해준다.

[접근]

1. substring으로 문자열을 잘라 접미사 배열을 만들고 Arrays.sort를 통해서 정렬을 하면 될 것이라고 생각했다.

[코드]

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main_S4_11656 {
	static String s;
	static String[] str;

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        s = br.readLine();
 
        str = new String[s.length()]; // 배열 생성
        
        for (int i = 0; i < s.length(); i++) {
            str[i] = s.substring(i); // 앞에서 부터 잘라서 접미사 배열에 넣기
        }
        
        // 접미사 배열 정렬하기
        Arrays.sort(str);
        
        for (int i = 0; i < str.length; i++) {
        	System.out.println(str[i]);
        }
    }
}