문제 링크
풀이
dp를 이용하여 풀이할 수 있다.
dp는 dp[악마다리 or 천사다리][몇 번째 패턴 문자까지 발견][몇 번째 돌다리까지 갔나]로 정의할 수 있다.
코드
#include <iostream>
#include <string>
using namespace std;
int dp[2][22][100];
string pat, a, b;
int dpf(int up_down, int pat_num, int cur_num) {
int &ret = dp[up_down][pat_num][cur_num];
if (ret) return ret;
if (pat_num == pat.length() - 1) return 1;
if (up_down) {
for (int i = cur_num + 1; i < a.length(); i++) {
if (a[i] == pat[pat_num + 1]) ret += dpf(0, pat_num + 1, i);
}
} else {
for (int i = cur_num + 1; i < a.length(); i++) {
if (b[i] == pat[pat_num + 1]) ret += dpf(1, pat_num + 1, i);
}
}
return ret;
}
int main() {
cin >> pat;
cin >> a >> b;
int ans = 0;
for (int i = 0; i < a.length(); i++) {
if (a[i] == pat[0]) ans += dpf(0, 0, i);
if (b[i] == pat[0]) ans += dpf(1, 0, i);
}
printf("%d", ans);
}
'Algorithm > BOJ' 카테고리의 다른 글
백준[9084] 동전 (0) | 2021.08.04 |
---|---|
백준[1915] 가장 큰 정사각형 (0) | 2021.08.04 |
백준 [11280] 2-SAT - 3 (0) | 2021.08.02 |
백준[4013] ATM (0) | 2021.07.30 |
백준[3977] 축구 전술 (0) | 2021.07.29 |