문제해결방법
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문을 작성하면 더 쉽게 범위를 구할 수 있다..
'백준 > 해시' 카테고리의 다른 글
[백준] C++ 2002번 추월 (0) | 2024.09.29 |
---|---|
[백준] C++ 4358번 생태학 (0) | 2024.09.29 |
[백준] C++ 20920번 영단어 암기는 괴로워 (1) | 2024.09.28 |
[백준] C++ 14425 문자열 집합 (0) | 2024.09.25 |
[백준] C++1764 듣보잡 (2) | 2024.09.25 |