일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 블록체인
- Container
- Refactoring
- Thread
- guru
- Algorithm
- Ethereum
- 알고리즘
- 이더리움
- 동시성
- 플랫폼
- Python
- function
- dockerfile
- BlockChain
- RabbitMQ
- BAEKJOON
- Fast API
- fluent python
- 파이썬
- IMAGE
- AWS
- Kubernetes
- 전문가를 위한 파이썬
- docker
- rust
- 코어 이더리움 프로그래밍
- 백준
- Network
- 러스트
Archives
- Today
- Total
글쓰기 | 방명록 | 관리 |
Victoree's Blog
2193_이친수 본문
728x90
Concept & Idea
어려운 문제는 아니었다. 우선 이차원 dp[i][j]배열의 첫번째 요소 [i]값은 n자리수를 뜻한다.
또한 두번째 요소 [j]값은 마지막 자리가 0으로 끝나는 수의 갯수, 1로 끝나는 수의 갯수 로 설정해두었다.마지막 자리가 0으로 끝나는 수는 다음자리 수를 만들 때, 0과 1로 두 가지를 더 만들 수 있다.반면, 마지막 자리가 1로 끝나는 수는 11의 문자열을 가질 수 없기 때문에 0만 붙여서 만들 수있다.
dp[i][0]=dp[i-1][0]+dp[i-1][1]; dp[i][1]=dp[i-1][0];
이런 점화식을 만들어낼 수 있던 간단한 문제였다.
배열을 long long 으로 설정해두어야 한다.
Code
#include <iostream>
using namespace std;
long long dp[91][2];
int main() {
int n;
cin>>n;
dp[1][1]=1;
dp[2][0]=1;
for(int i=3; i<=n; i++) {
dp[i][0]=dp[i-1][0]+dp[i-1][1];
dp[i][1]=dp[i-1][0];
}
cout<<dp[n][0]+dp[n][1]<<endl;
}
Fealing
처음으로 점화식을 스스로 생각해내어서 맞추었다.
물론 long long 타입의 배열을 생각해내어야 하는 것은 질문 검색을 통해 알았지만..
앞으로 디피문제를 풀때는 배열값을 long long으로 설정해놓을까 싶다..
그래도 좀만 더 열심히하면 다이나믹 프로그래밍 문제를 좀 더 잘 풀지 않을까 싶다!!
728x90
'Algorithm > 2019~2020' 카테고리의 다른 글
1912_연속합 (0) | 2021.04.22 |
---|---|
11055_가장 큰 증가 부분 수열 (0) | 2021.04.22 |
9465_스티커 (0) | 2021.04.22 |
10942_팰린드롬? (0) | 2021.04.22 |
1509_팰린드롬 분할 (0) | 2021.04.22 |
Comments