※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 25328번 문제인 문자열 집합 조합하기이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/25328
주어지는 각 문자열의 길이는 최대 17임을 확인하자. 즉, 각 문자열은 부분문자열을 많아야 \(2^{17} - 1\)개 존재하며(빈 문자열 제외), 그 중 특정 길이의 문자열만 세면 그 개수는 더욱 적어지고 각 문자열의 길이는 17 이하임을 확인하자. 또한, 주어지는 각 문자열에는 중복된 문자가 존재하지 않으므로 한 문자열에서 조합한 모든 문자열은 서로 다름을 확인하자.
따라서 각 문자열에 대하여 조합 가능한 모든 문자열에 한 번씩 접근해보면서 주어진 세 문자열에서 총 몇 회 등장했는지 기록하는 것으로 문제를 충분히 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <map>
#include <string>
using namespace std;
int K;
string X, Y, Z;
string A;
map<string, int> mp;
void func(int idx, string &s) {
if (A.length() == K) {
mp[A]++;
return;
}
if (idx == s.length()) return;
A += s[idx];
func(idx + 1, s);
A.pop_back();
func(idx + 1, s);
}
bool prnt;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> X >> Y >> Z >> K;
func(0, X); func(0, Y); func(0, Z);
for (auto &p : mp) {
if (p.second > 1) cout << p.first << '\n', prnt = 1;
}
if (!prnt) cout << -1;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 2874 // C++] 검정 직사각형 (0) | 2024.08.01 |
---|---|
[BOJ 14953 // C++] Game Map (0) | 2024.07.31 |
[BOJ 19358 // C++] Waiter's Problem (0) | 2024.07.29 |
[BOJ 14943 // C++] 벼룩 시장 (0) | 2024.07.28 |
[BOJ 31115 // C++] Graph Theory (0) | 2024.07.27 |