[C++] BOJ 1562 - ๊ณ๋จ ์Problem Solving/Baekjoon Online Judge (BOJ)2025. 4. 9. 16:34
Table of Contents

01. ๐ ๋ฌธ์ ํ์
- ์ธ์ ํ ๋ชจ๋ ์๋ฆฌ์ ์ฐจ์ด๊ฐ 1
- ์์ ๊ธธ์ด๋ N
- 0๋ถํฐ 9๊น์ง์ ์ซ์๊ฐ ๋ชจ๋ 1๋ฒ ์ด์ ๋ฑ์ฅ
- 0์ผ๋ก ์์ํ๋ฉด ์ ๋จ
* ์ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ๊ณ ์ซ์ ๊ธธ์ด N์ผ๋ก ๋ง๋ค ์ ์๋ ๊ณ๋จ ์์ ๊ฐ์๋ฅผ 1e9๋ก ๋ชจ๋๋ฌ ์ฐ์ฐํ์ฌ ์ถ๋ ฅ
01-1. ๊ฐ๋ฅํ ์๊ฐ ๋ณต์ก๋
- ์์ ํ์์ ๊ฒฝ์ฐ, ๋๋ต ์๊ฐ ๋ณต์ก๋๊ฐ O(10^N) ์ผ๋ก ์คํ ์๊ฐ์ ํ์ฐธ ์ด๊ณผ
- N์ ์ต๋๊ฐ์ด 100์ผ๋ก, ์๊ฐ ๋ณต์ก๋๊ฐ O(N^3) ์ดํ๋ก ๊ตฌํ๋์ด์ผ ํจ
01-2. ์๊ณ ๋ฆฌ์ฆ ์ ํ
- DP๋ฅผ ํตํด, ์ด์ ๋จ๊ณ์์ ์ฌ์ฉ๋ ์์ ๋ง์ง๋ง ์ซ์๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์
ํ๋ ๊ฒ์ผ๋ก ๊ฐ ๋จ๊ณ์์ 0-9 ๊น์ง์ ์๋ฅผ ํ ๋ฒ ์ด์ ์ฌ์ฉํ์๋ ์ง์ ๋ง์ง๋ง ์๊ฐ ์ด๋ค ์๋ก ๋๋๋ ์ง์ ๋ฐ๋ผ, ๋ค์์ ์ฌ ์ ์๋ ์๋ฅผ ๋ฏธ๋ฆฌ ์์ธก
(๋ง์ง๋ง ์๊ฐ 0์ผ ๊ฒฝ์ฐ, ๋ค์ ์๋ 1๋ง ์ฌ ์ ์๊ณ , ๋ง์ง๋ง ์๊ฐ 9์ผ ๊ฒฝ์ฐ, ๋ค์ ์๋ 8๋ง ์ฌ ์ ์์) - ๊ฐ ๋จ๊ณ์์ ๊ฐ ์๋ฆฌ ์๊ฐ ํ ๋ฒ์ฉ ์ฌ์ฉ๋์๋ ์ง ํ์ธํ๊ธฐ ์ํ์ฌ ๋นํธ ๋ง์คํน์ ์ด์ฉ
02. ๐ ์ฝ๋ ์ค๊ณํ๊ธฐ
- ์ซ์ ๊ธธ์ด N์ ์ ๋ ฅ
- ์ฒซ ์ซ์๋ 0์ ์ ์ธํ๊ณ ๋ชจ๋ ์ซ์๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์, 1๋ฒ์งธ ๋จ๊ณ์ 0์ ์ ์ธํ ๋ชจ๋ ์ซ์์ ๋ํ์ฌ ๋ฉ๋ชจ์ด์ ์ด์
-> ์์ง 1๋จ๊ณ๋ก ๊ฐ ๋ง์ง๋ง ์ซ์์ ๋ํ์ฌ ๋๋ฌํ ์ ์๋ ๊ฒฝ๋ก๊ฐ ํ๋ ๋ฐ์ ์๊ธฐ ๋๋ฌธ์, 1์ ์ ์ฅ - ๊ฐ ๋จ๊ณ(ํ์ฌ ์๋ฆฟ์), ๋ง์ง๋ง ์ซ์์ ๋ํ์ฌ ์ฒดํฌํ๊ณ ๋ค์ ๊ณ๋จ ์๋ฅผ ํฌํจํ ๋นํธ๋ง์คํฌ๋ฅผ ๊ณ์ฐ
- ๋ค์ ๋จ๊ณ(๋ค์์ ์ฌ ๋ง์ง๋ง ์ซ์์ ๋ง์คํฌ)์ ํ์ฌ ๋จ๊ณ์ ๊ฒฝ๋ก ์๋ฅผ ๊ฐ์ค
(0-9๊น์ง ์ซ์ ์ฌ์ฉ ์ฌ๋ถ์ ํ์ฌ ๋ง์ง๋ง ์ซ์๋ฅผ ๊ฐ๋ ๊ฐ์ง ์๋ฅผ ๊ฐ์คํ๋ ๊ฒ์ผ๋ก ์ํ์ ๋ํ ๊ณ๋จ ์์ ๊ฐ์๋ฅผ ํน์ ) - 3, 4์ ๊ณผ์ ์ ๋๊น์ง ๋ฐ๋ณตํ์ฌ ์ ์ฅ
- ๊ธธ์ด N์์ ๋ง์ง๋ง ์๊ฐ 0-9๋ก ๋๋๋ฉฐ, ๋ง์คํน์ด ๋ชจ๋ 1(0-9 ๋ชจ๋ ์ ๋ฐฉ๋ฌธ์ ๋ปํจ)๋ก ์ฑ์์ง ๋ฐฐ์ด ๊ฐ์ ๋ฐํํ์ฌ ํฉํจ
03. ๐ ๏ธ ์๋๋ณ ์์
1ํ์ฐจ
- ๋ง์ง๋ง ๊ฒฐ๊ณผ๋ฅผ ํฉํ ๋, ๋ชจ๋๋ฌ ์ฐ์ฐ์ ํ์ง ์์์ -> ๋ชจ๋๋ฌ ์ฐ์ฐ ์ถ๊ฐ
2ํ์ฐจ
04. ๐๏ธ ์ ๋ต ์ฝ๋
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD = 1e9;
ll dp[101][10][1024];
void func(int N){
for(int lv = 1; lv < N; lv++){
for(int back_el = 0; back_el <= 9; back_el++){
for(int mask = 0; mask < 1024; mask++){
ll &cur_step = dp[lv][back_el][mask];
if(0 < back_el) {
ll new_mask = mask | (1 << (back_el-1));
ll &next_step = dp[lv+1][back_el-1][new_mask];
next_step = (cur_step + next_step) % MOD;
}
if(back_el < 9) {
ll new_mask = mask | (1 << (back_el+1));
ll &next_step = dp[lv+1][back_el+1][new_mask];
next_step = (cur_step + next_step) % MOD;
}
}
}
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
for(int i = 1; i <= 9; i++) dp[1][i][(1 << i)] = 1;
ll full_mask = (1 << 10) - 1;
int N;
ll result = 0;
cin >> N;
func(N);
for(int i = 0; i <= 9; i++) {
result = (result + dp[N][i][full_mask]) % MOD;
};
cout << result << "\n";
return 0;
}'Problem Solving > Baekjoon Online Judge (BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [C++] BOJ 1806 - ๋ถ๋ถํฉ (0) | 2025.04.10 |
|---|---|
| [C++] BOJ 8895 - ๋ง๋ ๋ฐฐ์น (0) | 2025.04.10 |
| [C++] BOJ 2342 - Dance Dance Revolution (0) | 2025.04.08 |
| [C++] BOJ 10422 - ๊ดํธ (1) | 2025.04.07 |
| [C++] BOJ 10815 - ์ซ์ ์นด๋ (0) | 2025.04.06 |
@ONE_ :: ์ ํธ์
์๋ชป๋ ์ ๋ณด๊ฐ ์๋ค๋ฉด ๋ง์ํด์ฃผ์ธ์!