728x90
https://www.acmicpc.net/problem/9095
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 | #include <stdio.h> int arr[12] = { 0 }; int dp(int n) { if (n > 12) { return 0; } if (n <= 0) { return 0; } if (n == 1) { return 1; } if (n == 2) { return 2; } if (n == 3) { return 4; } if (arr[n]>0) { return arr[n]; } return arr[n] = dp(n - 1) + dp(n - 2) + dp(n - 3); } int main() { int num; int testcase; scanf_s("%d", &testcase); while(testcase>0) { scanf_s("%d", &num); printf("%d\n",dp(num)); // Q1 testcase--; } return 0; } | cs |
동아리차원에서 진행한 알고리즘 스터디 첫시간 풀게된 알고리즘인데
좀더 갈고 닦아야 한다. 남들에게 보여주기 민망한 수준의 정답이지만 올려봐야지.
** 생각해봐야 할 점은?
1.testcase 입력 후의 반복문에 대해 길이를 더 단축시키는 방법.
2. 12이하의 수가 본문에서의 조건인데, 그렇다면 12 이상의 경우에 대한 예외를 아예 설정하지 않아도 정답처리가 되는가? 백준초보라 잘 모르겠다.
3. 이전에 계산된 결과를 배열에 저장하는, 동적프로그래밍의 결과. 피보나치 수열의 재귀문과 마찬가지로 배열이
따로 존재하지않으면 엄청난 시간복잡도를 갖게 될텐데. Big-O notation 으로 표현하면 지수배만큼 되는지?
'프로그래밍 > programmers&bj' 카테고리의 다른 글
[C++][알고리즘] 프로그래머스::체육복 풀이 (0) | 2019.08.20 |
---|---|
[C++][알고리즘] 프로그래머스 "모의고사" 문제(완전탐색) 코드 (0) | 2019.08.18 |
[C++][알고리즘] 프로그래머스 "더맵게" 문제(heap) (0) | 2019.08.18 |
[JAVA][알고리즘] 백준 1330번 두 수 비교하기 (0) | 2019.08.08 |
[C][알고리즘] 백준 5532번 풀이 (0) | 2019.08.08 |