백준 알고리즘
19. 11656번 접미사 배열
Romenest
2021. 9. 27. 12:54
핵심은
1 - 접미사를 뽑아 내는것
2 - 뽑아낸 접미사들을 알파벳 순으로 '정렬' 하는것
해당 문제에서 접미사는 키워드 baekjoon을 기준으로 앞에서 하나씩 깎아서 없어지는 형태와 동일하다
baekjoon
aekjoon
ekjoon
kjoon
joon
oon
on
n
그말의 뜻은 인덱스를 이용하면 된다는 것.
마침 이 인덱스 값을 이용해서 문자열을 탐색할수 있는 메소드인 substring이 있다
*substring 은 원하는 문자열의 위치부터 탐색할 수 있는 기능이다
간단한 예로
String string = "0123456789"
0123456789 라는 문자열을 가진 string이 있을때
string.substring(4);
를 하게되면 인덱스 4의 값을 포함한 이후의 string값을 반환한다.
위처럼 4를 하게된다면 결과는 "456789" 가 되겠다
또다른 방법으로
string.substring(5,9);
이렇게 작성하게 된다면
index 5의 값부터 9의 값까지 반환하게 된다
즉 56789 가 되겠다.
본론으로 돌아와서
1. 우선 입력받은 문자를 substring을 이용해 잘라내어 arr에 보관한다
public class training3 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String string = br.readLine();
String[] arr = new String[string.length()];
int a = string.length();
for(int i=0; i<a; i++){
arr[i] = string.substring(i, string.length());
}
}
}
2. 쪼개어낸 접미사들을 정렬 한다
Arrays.sort(arr);
*Arrays 는 배열을 오름차순으로 정렬 시켜주는 기능을 가지고있다.
배열에 위치를 지정하여 원하는 범위만 정렬시킬 수도 있다
int[] arr = new int[] {1,5,4,2,3};
Arrays.sort(arr,2,5);
결과
arr = {1,5,2,3,4}
3. 정렬된 배열을 가지고있는 숫자만큼 출력
for(int i=0;i<a;i++){
sb.append(arr[i]+'\n');
}
system.out.println(sb);
결과출력시 줄넘김
코드전문
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class training3 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String string = br.readLine();
String[] arr = new String[string.length()];
int a = string.length();
for(int i=0; i<a; i++){
arr[i] = string.substring(i, string.length());
}
Arrays.sort(arr);
for(int i=0;i<a;i++){
sb.append(arr[i]+'\n');
}
System.out.println(sb);
}
}
결과