c++/백준
백준 11478 서로 다른 부분 문자열의 개수
시코.
2024. 1. 29. 19:57
728x90
저번 문제인 18870에서 썻던것과 비슷한 방법으로 풀어봤다.
백준 18870 실패
한시간 도전후 실패하고 답찾아봄 잘 설명된 글을 찾을 수 있었따 https://donggoolosori.github.io/2020/09/26/boj-18870/ [백준] 18870번 좌표 압축 - C++ - DGOS | 동꿀오소리 문제 donggoolosori.github.io 그냥 정렬하고
siko12.tistory.com
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
cin.sync_with_stdio(false);
cin.tie(NULL);
string s;
vector<string> c;
c.reserve(1000);
cin >> s;
//잘라낼 길이 1~ 전체까지
for (int i = 1; i <= s.size(); i++)
{
for (int j = 0; j+i-1 < s.size() ; j++)
{
string ss;//잘라낸 스트링
ss = s.substr(j,i);
c.emplace_back(ss);
}
}
sort(c.begin(),c.end());
c.erase(unique(c.begin(),c.end()),c.end());
cout << c.size();
}
/* 결과 성공했지만 삽입시 중복검사와 정렬을 함께한는 set이 더빠름 나는 한번에 하는편이 빠를줄 알았지...*/
그런데 0ms만에 푸는 방법이 있어 살펴 보았는데 아직 잘 모르겠다.
추가
harinboy님의 풀이를 보고 접미사 배열이라는것을 볼 수 있었고
관련된 것을 찾다 보 문자열 알고리즘에 대해 더 공부해보는것도 좋을것 같다는 생각도 든다.
Suffix Array와 LCP
Suffix Array (접미사 배열) Suffix Array(韓: 접미사 배열)은 어떤 문자열의 suffix(접미사)들을 사전순으로 나열한 배열을 의미한다. 문자열 관련된 문제에서 자주 쓰이는 방법이다. 예를 들어, 문자열 $S
blog.myungwoo.kr
https://namu.wiki/w/%EB%AC%B8%EC%9E%90%EC%97%B4%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98
문자열 알고리즘 - 나무위키
앞에 설명했던 문자열 알고리즘이 단순한 문자 자체를 비교하는 알고리즘이었다면, 라빈 카프 알고리즘은 해시를 이용하여 해시끼리 비교하는 알고리즘이다. 우선 찾으려는 패턴의 해시값을
namu.wiki
728x90