컴굥일지

[BOJ/백준 11656][C++] 접미사 배열 본문

알고리즘/코테 문제

[BOJ/백준 11656][C++] 접미사 배열

gyong 2022. 1. 11. 23:43
반응형

문제

https://www.acmicpc.net/problem/11656

 

문제 내용

문자열을 입력받아, 접미사를 사전 순으로 정렬하여 출력하면 된다.

 

문제 풀이

이 문제에서 그나마 가장 까다로운 부분은 접미사를 만들어내는 부분이다.

string 클래스의 substr(시작 지점, 문자 개수) 함수를 사용하면 쉽게 해결할 수 있다.
이 문제에서는 반복문을 n부터 시작해서 1씩 감소시켰다.
이는 첫번째 인자를 n-i로 하여 0부터 n-1까지 증가하도록 했으며, 두 번째 인자는 i로 하여 n부터 1까지 감소하도록 했다.

ex) [school] => school, chool, hool, ool, ol, l 순으로 저장된다.

 

코드

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

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	
	//입력
	string str;
	cin >> str;
	
	//문제 해결
	int n = str.length(); //문자열의 길이
	vector<string>v;
	
	for (int i = n; i >0; i--) {
		v.push_back(str.substr(n-i,i)); //접미사를 만드는 부분
	}
	sort(v.begin(), v.end());	//정렬

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

 

문제 코드 설명

1) 입력

문자열을 입력받기 때문에 string 변수를 이용하여 입력받는다.

 

2) 문제 해결

반복문을 돌며 접미사를 배열에 저장하고, 이를 정렬해서 순서대로 출력한다.

반응형
Comments