관리 메뉴

cococo-coding

[C++ 풀이] 11656번. 접미사 배열 본문

[BOJ] 코드 모음/C++_learning 문제집

[C++ 풀이] 11656번. 접미사 배열

_dani 2024. 1. 19. 19:24

풀이

문자열은 string으로 입력받는다.

string형 벡터 v를 선언해주고, 앞자리가 하나씩 없어지면서 생성될 문자열을 넣을 string형 tmp을 생성한다.

 

for문으로 i를 0부터 s.length()까지 돌리면서

s.substr(i, s.length()); 로 새로운 문자열을 생성해 tmp에 넣어준다.

substr의 첫번째인자는 시작지점이며, 두번째인자는 길이이다. (i가 시작지점부터 문자열의 끝까지 돌아간다.)

이 tmp는 벡터에 차곡차곡 넣어준다.

 

벡터 내부에는 새로 생성된 문자열이 들어가있으므로,

sort정렬을 이용해서 사전순으로 정렬해준다. (sort의 기본정렬은 오름차순이며, 문자열을 대상으로 했을때는 사전순으로 기본정렬된다.)

 

마지막으로 for문으로 벡터를 출력해준다. 


 

length() 와 size() 함수의 차이

  • length() : 주로 문자열에서 쓰며, 문자열의 실제 길이를 반환함
  • size() : 크기를 반환

substr()로 부분문자열 추출하기

  • substr(시작지점, 길이)

코드

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

/*
    1. 문자열S를 입력받는다.
    2. 접미사 순으로 각각 구한다.
    3. 구한 문자열들을 사전순으로 정렬한다. 
*/

int main() {
    //1
    string s;
    cin >> s;

    //2
    vector <string> v;
    string tmp;
    for (int i = 0; i < s.length(); i++) {
        //length함수와 size함수 차이점!!
        tmp = s.substr(i, s.length()); // 문자열 앞에서 하나씩 까면서 새로 생성함
        v.push_back(tmp); //새로얻은 문자열을 -> 벡터에 넣기
    }

    sort(v.begin(), v.end()); //정렬하기

    for (int i = 0; i < v.size(); i++) {
        cout << v[i] << '\n';
    }

    return 0;
}