http://hellogohn.com/post_one256
제가 통과된 코드랑 제 코드에 입력 여러가지 해보고 결괏값 비교해봤는데 다 같았거든요
근데 제 코드만 통과가 안되네요... 논리도 문제 없는 거 같은데
이게 통과되는 코드구요
http://hellogohn.com/post_one256
이게 제 코드에요..
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 83 84 85 86 87 88 89 90 91 | #include<iostream> #define MAX(a,b) (((a)>(b))?(a):(b)) using namespace std; //amount of stair int n = 0; //array of stair int* stairArray = 0; //sum of value array int* sumArray = 0; //compare two value and get right value to sumArray int getSumValue(int i) { int maxvalue = 0; if (i == 0 || i == 1 || i == 2) return sumArray[i]; else maxvalue = MAX(sumArray[i-2] + stairArray[i], sumArray[i - 3] + stairArray[i - 1] + stairArray[i]); return maxvalue; } int main() { //get amount of stair cin >> n; if (n > 300 || n < 0) return 0; //array of stair stairArray = (int*)malloc(sizeof(int)*n); //sum of value array sumArray = (int*)malloc(sizeof(int)*n); //get array of stair for (int i = 0; i < n; i++) { cin >> stairArray[i]; if (stairArray[i] > 10000 || stairArray[i] < 0) return 0; } ///////////////////////////////////// if (n > 2) { //init firstvalue; sumArray[0] = stairArray[0]; sumArray[1] = sumArray[0] + stairArray[1]; sumArray[2] = sumArray[0] + stairArray[2]; } else if (n == 2) { cout << stairArray[0] + stairArray[1]; return 0; } else if( n==1) { cout << stairArray[0]; return 0; } ///////////////////////////////// //logic to get sumArray[n]; ///logic/// for (int i = 0; i < n; i++) { sumArray[i] = getSumValue(i); } ///logic/// cout << sumArray[n - 1] << endl; return 0; } | cs |
결과가 잘나오는데 틀릴리가 없죠
boj에 동일한 문제가 있으니 거기서 반례 찾아 넣어보셔요
3 1 3 2 잘 나옴?
네 3번 1 3 2로 하면 3 나오고
4번 3 1 3 2 하면 8로 잘 나와요
3 1 3 2 다시 생각해보셈 뭐가 나와야 하는지
감사합니다 문제를 잘못이해했었네요 처음부터 계단한칸 밟는다고 생각햇어요 ㄳㄳ
이제 잘 됩니다 근데 계단한칸밟는다는거만 잘못안게 아니라 모두 잘못알고 있었네요 감사합니다