반응형
https://www.acmicpc.net/problem/2602
2602번: 돌다리 건너기
첫째 줄에는 마법의 두루마리에 적힌 문자열(R, I, N, G, S 로만 구성된)이 주어진다. 이 문자열의 길이는 최소 1, 최대 20 이다. 그 다음 줄에는 각각 <악마의 돌다리>와 <천사의 돌다리>를 나타내는
www.acmicpc.net
[ 문제풀이 ]
1. 3차원 dp 배열을 만듭니다. (dp[ 돌다리 ][ 두루마리의 문자열 ][ 돌다리 문자열 ])
2. 두루마리의 문자열을 for문을 통해 돌면서 돌다리 문자와 두루마리의 문자가 같다면 천사일 때 dp[ 악마 ][ i - 1 ][ 0 ~ j] 까지의 모든 값들을 더해 dp[ 천사 ][ i ][ j ] 에 저장해 주고 악마라면 반대로 저장해 줍니다.
3. dp[ 악마 ][ 두루마리 문자열 길이 ][ 0 ~ 돌다리 문자열 길이] 와 dp[ 천사 ][ 두루마리 문자열 길이 ][ 0 ~ 돌다리 문자열 길이]를 모두 더해 출력합니다.
[ 소스코드 ]
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #include<iostream> using namespace std; char ans[21]; char arr[2][101]; int dp[2][21][101]; int lenAns, lenArr; int main() { scanf("%s", ans); scanf("%s %s", arr[0], arr[1]); for (int i = 0; i < 21; i++) { if (ans[i] == 0) { lenAns = i; break; } } for (int i = 0; i < 101; i++) { if (arr[0][i] == 0) { lenArr = i; break; } } for (int i = 0; i < 2; i++) { for (int j = 0; j < lenAns; j++) { for (int k = 0; k < lenArr; k++) { dp[i][j][k] = -1; } } } for (int i = 0; i < lenArr; i++) { if (arr[0][i] == ans[0]) { dp[0][0][i] = 1; } if (arr[1][i] == ans[0]) { dp[1][0][i] = 1; } } for (int i = 1; i < lenAns; i++) { for (int j = i; j < lenArr; j++) { if (arr[0][j] == ans[i]) { int temp = 0; for (int k = 0; k < j; k++) { if (dp[1][i - 1][k] != -1) { temp += dp[1][i - 1][k]; } } dp[0][i][j] = temp; } if (arr[1][j] == ans[i]) { int temp = 0; for (int k = 0; k < j; k++) { if (dp[0][i - 1][k] != -1) { temp += dp[0][i - 1][k]; } } dp[1][i][j] = temp; } } } int ans = 0; for (int i = 0; i < lenArr; i++) { if (dp[0][lenAns - 1][i] != -1) { ans += dp[0][lenAns - 1][i]; } if (dp[1][lenAns - 1][i] != -1) { ans += dp[1][lenAns - 1][i]; } } printf("%d", ans); } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 11562번 - 백양로 브레이크 (C++) (0) | 2023.04.20 |
---|---|
[ 백준 ] 2032번 - 신기한 소수 (C++) (0) | 2023.04.19 |
[ 백준 ] 1507번 - 궁금한 민호 (C++) (0) | 2023.04.17 |
[ 백준 ] 2668번 - 숫자고르기 (C++) (0) | 2023.04.16 |
[ 백준 ] 1253번 - 좋다 (C++) (0) | 2023.04.15 |