티스토리 뷰

문제 출처 : https://www.acmicpc.net/problem/2602

분류 : DP


백준 2602 돌다리 건너기

모든 경우의수 구하기


구현 포인트

1) DP로 할 것

사실 이 문제는 DP라고 문제를 보자마자 알아채지 못했다. 아직 실력이 부족한 탓인가..

문제를 보고 상황 자체가 백트래킹 같아서 DFS로 접근을 하였다.


결과는 물론 시간초과;; 1초내에 몇 억이 될수있는 모든 경우를 DFS로 보기에는 역시..


주어진 조건에서 DFS로의 해결이 불가능 할꺼라는 것을 미리 잡았어야 했다.


일단 처음에 DFS로 구현했던 코드는 아래 같다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<cstdio>
#include<cstring>
using namespace std;
 
char s[21];
int ind, cnt;
 
void getWay(char d[], char a[], int i) {
    if (ind == (int)strlen(s)) {
        cnt++;
        return;
    }
    int j, size = strlen(d);
    if (i >= sizereturn;
    for (j = i; j < size; j++) {
        if (d[j] == s[ind]) {
            ind++;
            getWay(a, d, j+1);
            ind--;
        }
    }
}
int main() {
    char d[101], a[101];
    fgets(s, 21, stdin);
    fgets(d, 101, stdin);
    fgets(a, 101, stdin);
    ind = 0;
    getWay(d, a, 0);
    ind = 0;
    getWay(a, d, 0);
    printf("%d\n", cnt);
}
cs


그래서 결국 DP로 풀기로 했다. DP[i][j][k]를 k=0 이면 d로, 1이면 a로 끝나는 경우를 말하고,

주어진 d와 a를 i열까지 보았을 경우 두루마리의 문자열을 j까지 보는 경우를 담도록 했다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include<cstring>
using namespace std;
int main()
{
    char str[30], d[200], a[200];
    cin >> str >> d >> a;
    int dp[30][2= { 11 };
    int len = strlen(str), len_d = strlen(d);
    for (int i = 0; i < len_d; i++){
        for (int j = len - 1; j >= 0; j--){
            if (d[i] == str[j])
            {
                dp[j + 1][1+= dp[j][0];
            }
            if (a[i] == str[j])
            {
                dp[j + 1][0+= dp[j][1];
            }
        }
    }
    cout << dp[len][0+ dp[len][1<< endl;
    return 0;
}
cs


'Problem & Solving > Beakjoon judge' 카테고리의 다른 글

[1914] 하노이 탑 / Big Integer 구현  (3) 2018.02.20
[8983] 사냥꾼  (0) 2018.02.20
[2564] 경비원  (0) 2018.02.18
[1068] 트리  (0) 2018.02.18
[2491] 수열  (0) 2018.02.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함