# 문제
# 입력 및 출력
# 풀이
저번처럼 map을 사용해서 풀었음
문자열을 자르는 함수는 substr함수를 사용했음
C++ 레퍼런스 - string 의 substr 함수
modoocode.com
substr함수는 인자값으로 pos, count를 받는데
문자열에서 pos부터 pos+count까지의 문자열을 반환해줌
pos+count가 문자열의 실제 길이보다 길다면 그 이상을 반환하지 않고 문자열의 끝까지만 리턴함
#include <iostream>
#include <string>
#include <map>
using namespace std;
map<string, int> m;
int main() {
string s;
cin >> s;
for (int i = 1; i <= s.size(); i++) {
for (int j = 0; j < s.size() - i + 1; j++) {
m[s.substr(j, i)] = 1;
}
}
cout << m.size() << "\n";
}
따라서 두번째 for문에서 종료 조건부분은 그냥 j<s.size() 해도 상관은 없음
pos+count가 실제 문자열보다 길면 오류없이 그냥 알아서 최대 길이만큼 리턴해주기 때문임
근데 이렇게 하니까 시간초과가 나서 그냥 s.size()-i+1로 작성해줌
그리고 map대신 set을 사용해도됨
set도 map과 마찬가지로 중복허용이 안되기 때문임
여기선 key, value 쌍으로 필요하진 않기 때문에 set이 더 적합해보임
https://blockdmask.tistory.com/79
[C++] set container 정리 및 사용법
안녕하세요. BlockDMask 입니다 ! 오늘은 연관 컨테이너 set, multiset, map, multimap 중 set에 대해 학습해보겠습니다. 순서는 set container -> set의 사용법 -> set의 생성자와 연산자 -> set의 멤버 함수 -..
blockdmask.tistory.com
#include <iostream>
#include <string>
#include <set>
using namespace std;
set<string> s;
int main() {
string str;
cin >> str;
for (int i = 1; i <= str.size(); i++) {
for (int j = 0; j < str.size() - i + 1; j++) {
s.insert(str.substr(j, i));
}
}
cout << s.size() << "\n";
}
'Algorithm > 📖Baekjoon' 카테고리의 다른 글
#1931 회의실 배정 (0) | 2022.05.23 |
---|---|
#11729 하노이 탑 이동 순서 (0) | 2022.05.21 |
#1269 대칭 차집합 (0) | 2022.05.20 |
#1764 듣보잡 (0) | 2022.05.19 |
#10816 숫자 카드 2 (0) | 2022.05.18 |
댓글