레야몬
[C언어] 9095번 1, 2, 3 더하기 - DP 본문
#include <stdio.h>
int memo[11];
int f(int n)
{
switch(n) {
case 3:
return 4;
case 2:
return 2;
case 1:
return 1;
}
if(memo[n]) //이미 메모되어 있는 경우 메모되어 있는 값 반환
return memo[n];
return memo[n] = f(n-1)+f(n-2)+f(n-3); //1, 2, 3의 합으로 재귀
}
int main()
{
int T, n; //테스트 케이스의 개수, 정수 n
int i;
scanf("%d", &T);
for(i=0; i<T; i++) {
scanf("%d", &n);
printf("%d\n", f(n));
}
return 0;
}
그냥 간단하다. 메모리제이션으로 -1, -2, -3으로 나눠서 풀면 간단하게 얻을 수 있다.
※현재 고등학교 등교중인 학생입니다. 이제 알고리즘을 본격적으로 공부하기 시작해서 아직 초보입니다. 혹시 제가 잘못 알고있는 점이나 더 좋은 풀이 방법이 있어 댓글에 남겨주시면 감사히 하나하나 열심히 읽어보겠습니다. 좋아요, 단순한 댓글 한마디라도 저에겐 큰 힘이 됩니다! 감사합니다.
'알고리즘 > 백준' 카테고리의 다른 글
[C++언어] 11279번 최대 힙 - 우선순위 큐 (0) | 2022.08.29 |
---|---|
[C++] 7662번 이중 우선순위 큐 - 우선순위 큐, 트리 (0) | 2022.08.29 |
[C언어] 7576번 토마토 - 그래프 이론, BFS (0) | 2022.08.26 |
[C언어] 2630번 색종이 만들기 - 분할 정복, 재귀 (0) | 2022.08.26 |
[C언어] 2606번 바이러스 - 인접 그래프, BFS (0) | 2022.08.26 |
Comments