백준/해시

[백준] 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문을 작성하면 더 쉽게 범위를 구할 수 있다..