Skip to content

Commit

Permalink
Add Post: [백준] 10844번_쉬운 계단 수(Java)
Browse files Browse the repository at this point in the history
  • Loading branch information
Chaerim1001 committed Feb 5, 2024
1 parent 5a89654 commit b895fd0
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 0 deletions.
79 changes: 79 additions & 0 deletions _posts/2024-02-04-[백준] 10844번_쉬운 계단 수(Java).md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
---
title: "[백준] 10844번_쉬운 계단 수(Java)"
date: 2024-02-04
categories: [Algorithm, 문제풀이]

tags: [Algorithm, CodingTest]
math: true
---

### 문제 풀이
백준의 10844번 문제입니다.
[문제 출처](https://www.acmicpc.net/problem/10844)

### (1) 문제 파악

![q](/assets/img/posts/2024-02-04/q.png){: width="500" height="300" }

계단 수란인접한 자리끼리의 차이가 모두 1인 수를 의미하며, 길이가 N인 계단 수의 개수를 찾는 문제입니다.

### (2) 문제 풀이 방법 생각하기
0~9까지의 정수 중 **0****9**를 주의해야 합니다.

![q1](/assets/img/posts/2024-02-04/q1.png){: width="80"}

- 0 다음에는 반드시 1이 옵니다 -> $$arr[N][0] = arr[N-1][1] $$
- 9 다음에는 반드시 8이 옵니다 -> $$ arr[N][9] = arr[N-1][8] $$

0과 9를 제외한 수는 다음 자리에 자기 자신 **-1****+1**한 값을 다음 수로 가질 수 있습니다.

$$ arr[N][1] = arr[N-1][0] + arr[N-1][2] $$

이 규칙을 그대로 코드로 옮겨주면 됩니다!

### (3) 시간 복잡도 확인
시간 제한은 2초 입니다. 즉, 대략 **2억번** 연산 안에 문제를 해결해야 합니다.

dp에 대한 계산을 위해 for문이 중첩되어 사용되지만 O(N*10) 이므로 **O(N)** 시간 복잡도를 가집니다.

### (4) 구현

입력의 크기가 작으므로 파도반 수열을 미리 계산해놓고 원하는 P(N)을 출력하는 방식으로 작성하였습니다.

```java
import java.io.*;

public class Main {
static final long MOD = 1_000_000_000;

static int N;
static long[][] dp;

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
dp = new long[N+1][10];

for(int i=1; i<10; i++) {
// 한 자리 수는 무조건 계단 수가 1개니까
dp[1][i] = 1;
}

for(int i=2; i<N+1; i++) {
for(int j=0; j<10; j++) {
if(j==0) dp[i][0] = dp[i-1][1] % MOD;
else if (j==9) dp[i][9] = dp[i-1][8] % MOD;
else dp[i][j] = (dp[i-1][j-1] + dp[i-1][j+1]) % MOD;
}
}

long result = 0;
for(int i=0; i<10; i++) {
result += dp[N][i];
}
System.out.println(result % MOD);

br.close();
}
}
```
Binary file added assets/img/posts/2024-02-04/q.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/img/posts/2024-02-04/q1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit b895fd0

Please sign in to comment.