Algorithm/Baekjoon
[Baekjoon] 백준 11656번: 접미사 배열 (JAVA)
jeinie
2023. 11. 5. 23:28
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