https://www.acmicpc.net/problem/11656
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의 접미사를 사전순으로 한 줄에 하나씩 출력한다.
문자를 앞에서부터 하나씩 잘라가면서 만든 문자들을 사전순으로 정렬하는 문제
그냥 앞에서부터 자르면 되는데 맨날 문자열 처리에 .split을 쓰던 습관 때문에
하나씩 붙여가면서 뒤집고 더하는 바보같은 짓을 했었음.. 뒤늦게 깨닫고 다시 풀었다.
코드도 짧아지고 시간도 단축됨.
import java.io.*;
import java.util.*;
public class B_11656 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
TreeSet<String> tree = new TreeSet<>();
String data = br.readLine();
for (int i=0;i<data.length();i++){
tree.add(data.substring(i, data.length()));
}
Iterator<String> it = tree.iterator();
while(it.hasNext()){
bw.write(it.next());
bw.newLine();
}
bw.flush();
bw.close();
}
}

728x90
'알고리즘 > BOJ (JAVA)' 카테고리의 다른 글
| (JAVA) 백준 1764번 : 듣보잡 (0) | 2022.02.18 |
|---|---|
| (JAVA) 백준 10825번 : 국영수 (0) | 2022.02.17 |
| (JAVA) 백준 1475번 : 방 번호 (0) | 2022.02.10 |
| (JAVA) 백준 1037번 : 약수 (0) | 2022.02.08 |
| (JAVA) 백준 1874번 : 스택 수열 (0) | 2022.02.06 |