링크
https://www.acmicpc.net/problem/11478
11478번: 서로 다른 부분 문자열의 개수
첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다.
www.acmicpc.net
문제
입출력 예제
코드
#include <string>
#include <unordered_set>
#include <iostream>
using namespace std;
int main(void)
{
unordered_set<string> us;
string s;
cin >> s;
for (int i = 0; i < s.size(); i++)
{
for (int j = 1; j <= s.size() - i; j++)
{
us.insert(s.substr(i, j));
}
}
cout << us.size() << endl;
return 0;
}
풀이
- unordered_set을 이용
- for문을 이용해서 모든 문자를 순차적으로 불러들인다.
- 이후, 내부의 두번째 for문을 호출해서 substr 함수를 사용해 i번째 문자부터 j만큼의 길이의 문자열을 us에 삽입한다.
이때 set은 중복을 허용하지 않으므로 최초로 삽입된 문자만 삽입된다. - us에 삽입 되어있는 문자열의 개수를 출력한다.
'[게임 개발] 알고리즘 공부 > 백준' 카테고리의 다른 글
[C++] 11660번: 구간 합 구하기 5 (0) | 2023.06.29 |
---|---|
[C++] 2015번: 수들의 합 4 (0) | 2023.06.28 |
[C++] 2866번: 문자열 잘라내기 (0) | 2023.06.27 |
[C++] 1253번: 좋다 (0) | 2023.06.26 |
[C++] 2002번: 추월 (0) | 2023.06.25 |