백준/해시
[백준] C++ 11478번 서로 다른 부분 문자열의 개수
2zreal
2024. 9. 28. 20:47
문제해결방법
1. for문의 범위값을 제대로 설정한다.(부분 문자열의 길이가 1, 2, 3 ,4, 5 이렇게 증가한다. 2중 for문 사용.)
2. 부분 문자열을 S에서 추출한다.(C++의 경우 substr() 함수를 사용)
3. HashSet에 부분 문자열을 insert 한다.(만약 이미 HashSet에 지금 삽입하려는 문자열이 존재하는 경우는 삽입하지 않음.)
#include <iostream>
#include <unordered_set>
using namespace std;
int main()
{
unordered_set<string> hashSet;
string N = "";
int count = 0;
cin >> N;
for (int i = 0; i < N.length(); i++)
{
for (int j = 0; j+i < N.length(); j++)
{
string temp = "";
temp= N.substr(j, i+1);//j인덱스 부터 i+1개를 temp에 저장.
if (hashSet.find(temp) == hashSet.end())//만약 존재하지 않는다면 count를 증가시킨다.
{
hashSet.insert(temp);
count++;
}
}
}
cout << count;
}
그림을 그려가면서 for문을 작성하면 더 쉽게 범위를 구할 수 있다..