일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스sql
- 사칙연산
- SQL
- 그리디
- 백준알고리즘
- 다이나믹프로그래밍
- 그리디알고리즘
- MySQL
- 문자열
- C++
- 구현
- 수학
- 프로그래머스코딩테스트
- 논문리뷰
- 해시를사용한집합과맵
- 프로그래머스연습문제
- Image Classification
- 논문구현
- 이진탐색
- 브루트포스알고리즘
- C
- C언어
- 큐
- 자료구조
- 정렬
- 소수판정
- 프로그래머스
- 정수론
- 이분탐색
- 백준
- Today
- Total
초보 개발자의 이야기, 릿허브
[C++] 백준 9507번 Generations of Tribbles 본문
1. 문제이해
https://www.acmicpc.net/problem/9507
다음과 같은 피보나치 함수를 koong(n) (꿍 피보나치) 라고 할 때,
입력받은 n번째 꿍 피보나치를 출력하는 프로그램을 만드는 것이 목표이다.
n < 2 : 1
n = 2 : 2
n = 3 : 4
n > 3 : koong(n − 1) + koong(n − 2) + koong(n − 3) + koong(n − 4)
2. 문제풀이
간단한 DP문제이다.
사실 친절하게 수식까지 다 세워줘서 딱히 풀이라고 쓸 만한 것도 없는 것 같다..
그렇다고 그냥 넘어가기는 아쉬우니, DP(Dynamic Programming)의 개념에 대해 다시 한번 짚고 넘어가자.
Dynamic Programming, 일명 DP란, 말 그대로 동적 계획법이다.
소위 큰 문제를 나누어 작은 문제들로 나누어 푸는 것으로,
하나의 문제는 한번만 풀도록 하는 알고리즘으로 볼 수 있겠다.
분할정복과 비슷하게 느껴질 수도 있으나, 분할정복은 하나의 문제를 여러번에 걸쳐서 푼다는 차이점이 있다.
이번 문제처럼 가장 대표적인 DP 문제는 피보나치 수열이다.
피보나치 수열이란, 특정 숫자를 구하기 위해 이전 숫자와 그 이전의 숫자를 더하는 수열로,
식으로 나타내면 다음과 같다.
fibonacci [ i ] = fibonacci [ i - 1 ] + fibonacci [ i - 2]
이번 문제에서의 꿍 피보나치는 위 피보나치 수열을 살짝 변형한 것 뿐이다.
식도 친절하게 주어져있으니, 나머지는 코드로 그대로 구현만 하면 된다.
더 많은 DP문제와 해당 풀이는 아래 링크를 참고하자.
(혹은 포스팅 하단의 다이나믹 프로그래밍 태그를 클릭)
3. 소스코드
#include <iostream>
using namespace std;
int main() {
int t; // 테스트 케이스
int input;
long long koong[68];
cin >> t;
koong[0] = 1;
koong[1] = 1;
koong[2] = 2;
koong[3] = 4;
// 꿍 피보나치 계산
// n > 3 : koong(n − 1) + koong(n − 2) + koong(n − 3) + koong(n − 4)
for (int i = 4; i < 68; i++) {
koong[i] = koong[i - 1] + koong[i - 2] + koong[i - 3] + koong[i - 4];
}
// t번째 꿍 피보나치 출력
for (int i = 0; i < t; i++) {
cin >> input;
cout << koong[input] << "\n";
}
return 0;
}
테스트 케이스 t를 입력받고, 꿍 피보나치(koong)를 계산한다.
값과 수식은 문제에서 주어진 것과 동일하다.
이후, for문을 통해 각 테스트케이스에서의 꿍 피보나치를 출력한다.
'코딩테스트 > 📗 백준 (BOJ)' 카테고리의 다른 글
[Python] 백준 2563번 색종이 (0) | 2024.09.03 |
---|---|
[C++] 백준 17219번 비밀번호 찾기 (0) | 2022.11.18 |
[C++] 백준 2003번 수들의 합 2 (2) | 2022.11.16 |
[C++] 백준 1764번 듣보잡 (2) | 2022.08.26 |
[C++] 백준 2960번 에라토스테네스의 체 (0) | 2022.08.11 |