| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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
- lv2
- c++
- C
- 동적계획법
- level2
- 코틀린
- kotlin
- BFS
- 다이나믹 프로그래밍
- 다이나믹프로그래밍
- JavaScript
- cpp
- dfs
- 그리디
- 임베디드
- 누적합
- 이분탐색
- dp
- 컴퓨터 비전
- 백준
- 프로그래머스
- level3
- 2018 KAKAO BLIND RECRUITMENT
- 자바
- 통신 인터페이스
- 컴퓨터비전
- Stack
- 구현
- 우선순위큐
- java
Archives
- Today
- Total
코드를 느껴바라
11057번 : 오르막 수 [C++] 본문
문제 링크
성공 여부(걸린 시간): 성공(9분)
아이디어
해당 문제는 오르막 수 2를 풀어본 사람이라면 웃으면서 풀 수 있는 문제이다.
일단 주의할 점은 인접한 수가 같더라도 오르막 수 이고
한자리 수도 전부 오르막수로 간주된다.(그래서 1을 입력하면 10임)
dp [자릿수][해당 자릿수에 위치한 수 : 0~9 사이의 숫자]
그렇게 한다면
3중 for문으로
자릿수{
이전 자릿수의 작은 수{
현재 자릿수의 크거나 같은 수{
dp[i][k] = (dp[i][k] + dp[i-1][j]) % 10007;
}
}
}
이렇게 해주면 끝

풀이 코드
#include<iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int dp[1001][10] = { {0,}, };
int N;
cin >> N;
for (int i = 0; i < 10; i++) {
dp[1][i] = 1;
}
for (int i = 2; i <= N; i++) {
for (int j = 0; j < 10; j++) {
for (int k = j; k < 10; k++) {
dp[i][k] = (dp[i][k] + dp[i-1][j]) % 10007;
}
}
}
int sum = 0;
for (int i = 0; i < 10; i++) {
sum = (sum + dp[N][i]) % 10007;
}
cout << sum;
return 0;
}반응형
'PS > 백준(Baekjoon)' 카테고리의 다른 글
| 2342번 : Dance Dance Revolution [C++] (2) | 2025.12.31 |
|---|---|
| 2156번 : 포도주 시식 [C++] (0) | 2025.12.30 |
| 11727번 : 2xn 타일링 2 [C++] (0) | 2025.12.29 |
| 2098번 : 외판원 순회 [C++] (0) | 2025.12.29 |
| 1562번 : 계단 수 [C++] (2) | 2025.12.28 |
