Notice
Recent Posts
Recent Comments
Link
거의 알고리즘 일기장
백준 10844번 _ 쉬운 계단 수 본문
https://www.acmicpc.net/problem/10844
주의사항
%를 계산시마다 할것!!!
전체코드
재귀 풀이
#include <iostream>
#define DIV_NUM 1000000000
using namespace std;
long long dp[10][101];
int N;
void dpInit()
{
for (int i = 0; i <= 9; i++)
for (int j = 1; j <= N; j++)
dp[i][j] = -1;
}
long long getCount(int number, int n)
{
long long& ret = dp[number][n];
if (ret != -1) return ret;
//기저사례
if (n == N)
return ret = 1;
ret = 0;
if (number == 0)
ret += getCount(number + 1, n + 1);
else if (number == 9)
ret += getCount(number - 1, n + 1);
else
{
ret = (ret + getCount(number - 1, n + 1)) % DIV_NUM;
ret = (ret + getCount(number + 1, n + 1)) % DIV_NUM;
}
return ret%DIV_NUM;
}
void solve()
{
long long cnt = 0;
for (int number = 1; number <= 9; number++)
cnt = (cnt + getCount(number, 1)) % DIV_NUM;
cout << cnt;
}
int main()
{
cin >> N;
dpInit();
solve();
return 0;
}
반복문 풀이
#include <iostream>
#include <algorithm>
using namespace std;
long long int dp[102][11];
int main(void)
{
int n;
cin >> n;
long long int result = 0;
for (int j = 1; j <= 9; j++)
{
dp[1][j] = 1;
}
for (int i = 2; i <= n; i++)
{
for (int j = 0; j <= 9; j++)
{
if (j == 0)
{
dp[i][j] = dp[i - 1][j + 1];
}
else
{
dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j + 1];
}
dp[i][j] %= 1000000000;
}
}
for (int j = 0; j <= 9; j++)
{
result += dp[n][j];
result %= 1000000000;
}
cout << result;
return 0;
}
후기
한 몇일간 dp문제만 주구장창 풀어서 쉬운 문제는 풀수있을만큼 감을 다시 잡은것같다. 며칠전까지만 해도 풀었던 문제도 어떻게 풀었는지 기억이 안나 좌절했었는데 다행이다.ㅎㅎ
반응형
'알고리즘 문제풀이' 카테고리의 다른 글
백준 11051번 _ 이항 계수2 (0) | 2020.05.09 |
---|---|
백준 11057번 _ 오르막 수 (0) | 2020.05.09 |
백준 1699번 _ 제곱수의 합 (0) | 2020.05.09 |
백준 2294번 _ 동전 2 (0) | 2020.05.09 |
백준 9465번 _ 스티커 (0) | 2020.05.09 |
Comments