반응형
<문제 소개>
<소스 코드>
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <map>
#include <unordered_map>
#include <set>
#include <cmath>
#include <stack>
#include <queue>
#include <algorithm>
#include <cstdlib>
using namespace std;
int main()
{
// 쓰레드 환경이 아닐때 버퍼를 분리하여 처리속도를 빠르게 해줌
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string s;
cin >> s;
set<string> subWord;
for (int i = 1; i <= s.length() ; i++)
{
for (int startWord = 0; startWord <= s.length() - i; startWord++)
{
string curWord = s.substr(startWord, i); // 저장할 문자
subWord.insert(curWord);
}
}
cout << subWord.size();
return 0;
}
<풀이과정>
1. 주어진 문자 s를 입력받고, 각 부분문자열을 담을 string형 set subWord를 선언한다.
2. set를 사용한 이유는 부분문자열의 중복을 없애고 해당 개수를 파악하기 위함이다.
3. 먼저 각 문자의 개수를 나타내는 i를 1부터 s의 길이까지 반복하고, 그 안에서 시작 단어를 나타내는 startWord를 맨 앞 인덱스인 0부터 각 문자열의 길이에 맞는 범위인 s의 길이에서 i를 뺀 s.length() - i 인덱스까지 반복한다.
4. 위의 과정을 반복하면서 substr()함수를 이용해 시작 단어부터 각 문자의 개수에 따라 부분문자열을 추출하고, 해당 문자열을 subWord에 넣어준다.
5. 모든 과정이 끝난 뒤 부분문자열의 집합인 subWord의 개수를 출력한다.
<코멘트>
substr() 함수와 이중 for문을 이용하여 풀었다!
<제출결과>