ํฐ์คํ ๋ฆฌ ๋ทฐ
[๋ฌธ์ ]
https://www.acmicpc.net/problem/2011
[ํ์ด]
DP๋ฅผ ์ฌ์ฉํ์ฌ ํ์ดํ๋ ๋ฌธ์ ๋ก, ํด๋น ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ ํ์ด๋ฅผ ์งํํ์์ต๋๋ค.
https://happybplus.tistory.com/45
์ซ์๊ฐ ๋ง๋ค์ด์ง ์ ์๋ ์กฐ๊ฑด์ ์๊ฐํ๊ณ ๊ฐ ์กฐ๊ฑด๋ณ๋ก ์ฒ๋ฆฌ๋ฅผ ๋ค๋ฅด๊ฒ ํด์ฃผ์์ต๋๋ค.
์ฐ์ , ๋งจ ์ฒ์ ์ซ์๊ฐ 0์ด๋ฉด(numbers.charAt(0)์ด 0์ผ๋) ํด์์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๋ํ ๋งจ ์ฒ์ ์ซ์๊ฐ 0์ด ์๋๊ณ , ํ์ฌ ์ซ์๊ฐ 0์ด๋ผ๋ฉด(numbers.charAt(i)) ์ด์ ์ซ์์ 1 ๋๋ 2๊ฐ ์์ ๊ฒฝ์ฐ์๋ง 10, 20์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ๋ง์ฝ, 1 ๋๋ 2๊ฐ ์๋ค๋ฉด ํด์์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋งจ ์ฒ์ ์ซ์๊ฐ 0์ด ์๋๊ณ , ๋ํ ํ์ฌ ์ซ์๋ 0์ด ์๋๋ผ๋ฉด ํ์ฌ index์ ์ด์ ์ซ์(numbers.charAt(i-1))์ ๊ฐ์ ๋ฐ๋ผ 3๊ฐ์ง ๊ฒฝ์ฐ์ ์๊ฐ ์์ต๋๋ค.
- ์ด์ ์ซ์๊ฐ 1์ด๋ผ๋ฉด dp[i] = dp[i-1] + dp[i-2]
- ์ด์ ์ซ์๊ฐ 2๋ผ๋ฉด ํ์ฌ ์ซ์๊ฐ 1 ~ 6 ์ผ๋๋ง 26๋ณด๋ค ์์ผ๋ฏ๋ก dp[i] = dp[i-1] + dp[i-1];
- ์์ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ ์ซ์๋ค์ ๋ชจ๋ ๋จ๋ ์ฒ๋ฆฌ ๋์์ด๋ฏ๋ก dp[i] = dp[i-1];
์ด๋, ๋ง์ฝ ํ์ฌ index๊ฐ 1์ด๋ผ๋ฉด, dp[i-2]๋์ 1์ ๋ํด์ค๋๋ค.
์์ 1์ ์์๋ก ์ค๋ช ํด๋ณด์๋ฉด,
์ซ์๋ค์ด 2 5 1 1 4 ๊ฐ ๋ค์ด์ด.
0 -> 2
1 -> 25 2+5
2 -> 25+1, 2+5+1
3 -> 25+11, 2+5+11, 25+1+1, 2+5+1+1
4 -> 25+11+4 2+5+11+4, 25+1+1+4, 2+5+1+1+4,25+1+14, 2+5+1+14
0๋ฒ์งธ index์ ๊ฐ์ 2 ์ด๋ฏ๋ก, dp[0] = 1์ ๋๋ค.
1๋ฒ์งธ index์ ์ด์ ๊ฐ์ 2 ์ด๋ฏ๋ก dp[1] = 2์ ๋๋ค.
2๋ฒ์งธ index์ ์ด์ ๊ฐ์ 5์ด๋ฏ๋ก, ๋จ๋ ์ฒ๋ฆฌ ๋์์ด๋ผ 25์ 2+5์ ๊ฐ๊ฐ 1์ ๋จ๋ ์ผ๋ก ๋ํด dp[2] = 2๊ฐ ๋ฉ๋๋ค.
3๋ฒ์งธ index์ ์ด์ ๊ฐ์ 1์ด๋ฏ๋ก, index-2์ ๊ฐ๋ค๊ณผ๋ ๊ฒฐํฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋ผ์ 25์ 2+5์ ๊ฐ๊ฐ 11์ ๋ํ ์ฝ๋์ 25+1๊ณผ 2+5+1์ ๋จ๋ ์ผ๋ก 1์ ๋ํ ์ฝ๋ ์ด 4๊ฐ์ง๊ฐ ๊ฐ๋ฅํฉ๋๋ค. (dp[3] = dp[2] + dp[1] = 4)
4๋ฒ์งธ index๋ ์ด์ ๊ฐ์ 1๋ก ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก, 3๋ฒ๊ณผ ๊ฐ์ด dp[4] = dp[3] + dp[2] = 6์ด ๋ฉ๋๋ค.
๋ฐ๋ผ์ ๊ฐ๋ฅํ ๋ชจ๋ ๋ฐฉ๋ฒ์ 6๊ฐ์ง๋ก dp[4]๋ฅผ ํตํด ์ ์ ์์ต๋๋ค.
[์ฝ๋]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int N;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String numbers = br.readLine();
N = numbers.length();
int[] dp = new int[N];
decode(numbers, dp);
System.out.println(dp[N-1]);
}
public static void decode(String numbers, int[] dp) {
if(numbers.charAt(0) == '0') {
// ์ฒซ๋ฒ์งธ ์ซ์๊ฐ 0์ด๋ฉด ํด์ ๋ถ๊ฐ๋ฅ
return;
}
dp[0] = 1;
for(int i=1;i<numbers.length();i++) {
// numbers[i]๊ฐ 0์ผ๋๋ ์์๋ฆฌ๊ฐ 1 || 2์ผ๋๋ง ํด์์ด ๊ฐ๋ฅํจ
// ๋ฌด์กฐ๊ฑด numbers[i-1]๊ณผ numbers[i]๊ฐ ํ ์ธํธ์ด๋ฏ๋ก, dp[i-2]๋ ๊ฐ์๊ฐ.
if(numbers.charAt(i) == '0') {
if(numbers.charAt(i-1) != '1' && numbers.charAt(i-1) != '2') {
// ์๋ชป๋ ์ฝ๋์
return;
}
if(i == 1) {
dp[i] = 1;
} else {
dp[i] = (dp[i] + dp[i-2])%1000000;
}
} else {
// ์ด์ ์ซ์๊ฐ 1์ธ ๊ฒฝ์ฐ
if(numbers.charAt(i-1) == '1') {
if(i == 1) {
dp[i] = (dp[i-1] + 1)%1000000;
} else {
dp[i] = (dp[i-1] + dp[i-2])%1000000;
}
} else if(numbers.charAt(i-1) == '2' && numbers.charAt(i) >= '1' && numbers.charAt(i) <= '6') {
if(i == 1) {
dp[i] = (dp[i-1] + 1)%1000000;
} else {
dp[i] = (dp[i-1] + dp[i-2])%1000000;
}
} else {
// ๋ฌด์ ๊ฑด ๋จ๋
์ผ๋ก ์ฒ๋ฆฌ
dp[i] = dp[i-1];
}
}
}
}
}
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ๋ฐฑ์ค 1806๋ฒ - ๋ถ๋ถํฉ (0) | 2022.08.01 |
---|---|
[Java] ๋ฐฑ์ค 5214๋ฒ - ํ์น (0) | 2022.07.18 |
[Java] ๋ฐฑ์ค 16500๋ฒ - ๋ฌธ์์ด ํ๋ณ (0) | 2022.07.15 |
[Java] ๋ฐฑ์ค 5430๋ฒ - AC (0) | 2022.07.14 |
[Java] ๋ฐฑ์ค 2110๋ฒ - ๊ณต์ ๊ธฐ ์ค์น (0) | 2022.06.28 |
- Total
- Today
- Yesterday
- ์นด์นด์ค ์ธํด
- ์ด์์ฒด์
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- ๋ฐฑ์ค node.js
- ๋์์ธ ํจํด
- ๋คํธ์ํฌ
- JavaScript
- fp
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ๋ฐฑ์ค
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- ํฌํฌ์ธํฐ
- ํ๋กํ ์ฝ
- ์ฝ๋ฉํ ์คํธ
- Baekjoon
- ์๋ฐ
- ๋ฐฑ์ค javascript
- ์ ์ญ ๋ณ์
- ์ด๋ถํ์
- ์๋ฐ์คํฌ๋ฆฝํธ
- map
- http
- ์๊ณ ๋ฆฌ์ฆ
- ํ๋กํผํฐ
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- git
- TDD
- ๋ ์์ปฌ ํ๊ฒฝ
- ํ๋ก๊ทธ๋๋จธ์ค
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |