문자열 슬라이싱과 관련된 문제이다
string에 내장되어있는 substr 함수를 사용하여 문자열의 일부를 집합에 넣는다
substr(i, j) : i번째 인덱스부터 j개의 문자를 반환함
또한 이중 for문을 이용하여
겉 for : 몇 개의 문자를 반환할건지 ( 1개 ~ 문자열 길이 )
안 for : 어디 index부터 문자열을 새로 만들건지 ( 0 ~ 문자열 길이 - 1 )
구상했다
사실 만들 수 있는 문자열의 개수가 중요한 것이지, 그 안에 있는 문자열이 정렬될 필요는 없다
그래서 시간이 훨씬 빨리 걸리는 unordered_set을 이용하여 중복된 값만 없애주고, 빠르게 동작(시간 복잡도 O(1))하여 최종 문자열의 개수를 출력하였다
완성된 코드는 아래와 같다
#include <iostream>
#include <unordered_set>
#include <string>
using namespace std;
unordered_set<string> myset;
string input;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> input;
for (int i = 1; i <= input.length(); i++) {
for (int j = 0; j < input.length(); j++) {
string temp = "";
temp = input.substr(j, i);
myset.insert(temp);
}
}
printf("%d", myset.size());
}
'백준' 카테고리의 다른 글
[1004] 어린 왕자 (0) | 2022.08.12 |
---|---|
[2477] 참외밭 (0) | 2022.08.12 |
[1269] 대칭 차집합 (0) | 2022.07.30 |
[1764] 듣보잡 (0) | 2022.07.29 |
[10816] 숫자 카드 2 (0) | 2022.07.29 |
댓글