백준 알고리즘

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);
  
    }    
}

 

결과