※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 13322번 문제인 접두사 배열이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/13322
13322번: 접두사 배열
접미사 배열(suffix array)이란, 어떤 문자열의 모든 접미사를 사전 순으로 정렬한 뒤, 각 접미사의 시작 위치를 기록한 배열을 의미한다. 예를 들어 'banana' 라는 문자열에 대해 접미사 배열을 구한
www.acmicpc.net
주어진 문자열의 접두사들의 모임은 \(s\)의 0번째 문자부터 \(i\)번째 문자까지의 부분문자열 \(s_i\)들의 모임과 같음을 관찰하자. 또한, \(s_i\)와 \(s_j\) (단, \(i<j\)에 대하여 \(s_j\)의 앞 \(i+1\)글자로 이루어진 문자열은 \(s_i\)와 항상 같으므로 사전순을 기준으로 \(s_i<s_j\)가 항상 성립한다. 즉, \(i<j\)이면 \(s_i<s_j\)가 성립한다.
따라서 문자열의 길이를 \(N\)이라 할 때 0부터 \(N-1\)까지의 정수를 차례대로 출력하는 것으로 문제를 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
string s; int slen;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> s;
slen = s.length();
for (int i = 0; i < slen; i++) cout << i << '\n';
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 28353 // C++] 고양이 카페 (0) | 2023.12.12 |
---|---|
[BOJ 10193 // C++] Word Swap (1) | 2023.12.11 |
[BOJ 10195 // C++] Underwater Trip (0) | 2023.12.09 |
[BOJ 10194 // C++] Aligned Calender (0) | 2023.12.08 |
[BOJ 28214 // C++] 크림빵 (0) | 2023.12.07 |