백준코딩일기

11656) 접미사 배열 c++

nari___ 2020. 12. 1. 13:23

문제 ) www.acmicpc.net/problem/11656

 

11656번: 접미사 배열

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

www.acmicpc.net

 

풀이 ) 

접미사를 보면, baekjoon, aekjoon, ekjoon, kjoon, joon, oon, on, n 으로 총 8가지이다.
입력받은 문자열 baekjoon 인데, 가장 앞에 한 글자씩 지우면서 접미사를 만들었다는 것을 알 수 있다.

1. 문자열을 입력받아서 문자열의 길이를 len 이라는 변수에 저장해 둔다.

2. 문자열을 substr() 함수를 이용하여 앞에 한 글자씩 지워서 str [] 배열에 저장한다.
   str[i] = input.substr(i, len);

   substr(a, b) => 문자열의 a번째 글자부터 b까지 글자만 추출한다.

3. 모든 접미사를 사전순으로 정렬한다.
    sort (str, str+len) => str 배열을, 배열 전체를 정렬한다.

 

 

코드 )

#include <iostream>
#include <algorithm>
using namespace std;

string input;
string str[1000];
int main(void)
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    cin >> input;
    int len = input.length();

    for(int i=0; i<len; i++){
        str[i] = input.substr(i, len);
    }

    sort(str, str+len);
    for(int i=0; i<len; i++) {
        cout << str[i] <<"\n";
    }
}