일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준 1로 만들기
- 백준 로프
- ACM Craft
- 백준 1068
- 42서울 라피신 후기
- 백준 1348
- 백준 1463
- BOGGLE
- 백준 1003
- 백준 2217
- 백준 boggle
- 백준 9095
- 백준 17143
- 라피신
- 백준 9202
- 라피신 후기
- 피보나치 함수
- 백준 2585
- C++
- 백준 #백준4963 #섬의 개수
- 라피씬
- 백준 낚시왕
- 백준
- 백준 1005
- 백준 주차장
- 백준 트리
- 백준 피보나치 함수
- 42서울
- 백준 경비행기
- 42서울 후기
Archives
프로그래머의 개발노트
[백준 9095] 1,2,3 더하기 (C++) 본문
https://www.acmicpc.net/problem/9095
- 입력
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
- 출력
첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.
- 풀이
1,2,3 까지 구할수 있는 경우를 생각해보자.
- 1
1
- 2
1+1
2
- 3
1+1+1
1+2
2+1
이제 4를 생각해보면, 3에서 구했던 값들에 1을 더하고, 2에서 구했던 값들에 2를 더하고, 1에서 구했던 값들에 3을 더하면 된다.
1+1+1+1
1+2+1
2+1+1
=> dp(3)의 갯수와 동일
1+1+2
2+2
=> dp(2)의 갯수와 동일
1+3
=> dp(1)의 갯수와 동일
따라서, 점화식은 dp[n] = dp[n-1] + dp[n-2] + dp[n-3] (n >= 4)로 세울 수 있겠다.
- 코드
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 | #include <iostream> #include <vector> #define endl "\n" int T; std::vector<int> dp; void input_faster() { std::ios_base::sync_with_stdio(false); std::cin.tie(0); std::cout.tie(0); } void input() { input_faster(); std::cin >> T; dp.resize(11, 0); } void print_val(int n) { std::cout << dp[n] << endl; } void solve() { int n; int i = 3; std::cin >> n; dp[1] = 1; dp[2] = 2; dp[3] = 4; while (++i <= n) dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]; print_val(n); } int main() { input(); while(T--) solve(); return (0); } | cs |
'백준 알고리즘' 카테고리의 다른 글
[백준 1005] ACM Craft(C++) (0) | 2021.02.14 |
---|---|
[백준 1003] 피보나치 함수 (C++) (0) | 2021.01.21 |
[백준 1463] 1로 만들기 (C++) (0) | 2021.01.21 |
[백준 17143] 낚시왕 (C++) (0) | 2021.01.20 |
[백준 1348] 주차장 (C++) (0) | 2021.01.17 |
Comments