[C++] BOJ 2342 - Dance Dance RevolutionProblem Solving/Baekjoon Online Judge (BOJ)2025. 4. 8. 17:46
Table of Contents

01. ๐ ๋ฌธ์ ํ์
- { 0: ์ค์ฌ, 1: ์, 2: ์ผ์ชฝ, 3: ์๋, 4: ์ค๋ฅธ์ชฝ }
- ํ ๋ฒ์ ํ ๋ฐ๋ง ์์ง์ฌ์ผ ํจ
- ๊ฒ์ ์์์ ์ ์ธํ๊ณ ๋ ๋ฐ์ด ๊ฐ์ ์ง์ ์ ์์ผ๋ฉด ์ ๋จ
- ์ค์์์ ๋ค๋ฅธ ์ง์ ์ผ๋ก ์์ง์ด๋ฉด 2๋งํผ์ ํ ์ฌ์ฉ (0 -> 1,2,3,4)
- ์ค์์ด ์๋ ํ ์ง์ ์์ ์ธ์ ํ ์ง์ ์ผ๋ก ์์ง์ด๋ฉด 3๋งํผ์ ํ ์ฌ์ฉ (Ex. 1 -> 2, 4)
- ์ค์์ด ์๋ ํ ์ง์ ์์ ๋ฐ๋ํธ์ผ๋ก ์์ง์ด๋ฉด 4๋งํผ์ ํ ์ฌ์ฉ (Ex. 1 -> 3)
- ๊ฐ์ ์ง์ ์ผ๋ก ์์ง์ด๋ฉด 1๋งํผ์ ํ ์ฌ์ฉ (Ex. 1 -> 1)
* ๋ค์ ๋ฐํ์ ์ง์์ฌํญ์ด ์์ด๋ก ์ฃผ์ด์ก์ ๋, ๋ชจ๋ ์ง์์ฌํญ์ ๋ง์กฑํ๋ ์ต์ ํ์ ๊ตฌํด์ผ ํจ
01-1. ๊ฐ๋ฅํ ์๊ฐ ๋ณต์ก๋
- ์๊ฐ ์ ํ 2์ด๋ก ์๊ฐ๋ณต์ก๋๊ฐ O(N^2) ์ดํ๊ฐ ๋๋๋ก ๊ตฌํํ ์ ์์
01-2. ์๊ณ ๋ฆฌ์ฆ ์ ํ
- ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ํตํด ํญ์ ์ต์์ ํ์ ์ฌ์ฉํ๋๋ก ๊ณ ๋ฅผ ๊ฒฝ์ฐ, ์ํฉ์ ๋ฐ๋ผ ์ต์ ์ ์๊ฐ ๋์ค์ง ์์ ๊ฐ๋ฅ์ฑ์ด ์์
- ์ง๊ธ ๋น์ฅ์ ์ต์์ผ์ง๋ผ๋ ๋ฐ์ ์ํ (์ ๋ฐ์ด ๊ฐ๊ฐ ๋ฐ๋ํธ์ ์๋ ๊ฒฝ์ฐ Ex, (1, 3))์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์๊ธฐ ๋๋ฌธ
- ๋ฐ๋ผ์, ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ๋, ์ค๋ณต๋ ์ฐ์ฐ์ ํผํ๊ธฐ ์ํด ๋จ๊ณ์ ๋ฐ(์ข/์ฐ)์ ๋ฐ๋ฅธ ์ต์ ํ์ ๋ฉ๋ชจ์ด์ ์ด์
02. ๐ ์ฝ๋ ์ค๊ณํ๊ธฐ
- ๊ฐ ์ง์ ์์ ์ด๋ํ์ ๋, ๋ฐ์ํ๋ ๊ฐ์ค์น๋ 5 * 5 ๊ฐ๋ก ํ ์ด๋ธ์ ์์ฑ
- ์กด์ฌํ ์ ์๋ ๊ฒฝ์ฐ์ ์์๋ ํฐ ์๋ฅผ ๋ํด์ค ์ต์ ์ ์์์ ๋ฐฐ์
- ์ง์์ฌํญ์ ๋ฐฐ์ด๋ก ์ ๋ ฅ๋ฐ์
- ์ฌ๊ทํจ์๋ก ์ธ์(ํ์ฌ๋จ๊ณ, ์ค๋ฅธ๋ฐ ์์น, ์ผ๋ฐ ์์น)๋ฅผ ์ ๋ฌ
- ๋ง์ง๋ง ๋จ๊ณ (0) ์ผ ๊ฒฝ์ฐ, ์ข ๋ฃ๋ฅผ ์๋ฏธํ๋ฏ๋ก, 0์ ๊ฐ์คํ ์ ์๋๋ก ๋ฐํ
- ํ ๋ฐ์ ์์น๊ฐ 0๋ณด๋ค ํด ๋, ์ ๋ฐ์ ์์น๊ฐ ๊ฐ์ผ๋ฉด ํฐ ์๋ฅผ ๊ฐ์คํ ์ ์๋๋ก ๋ฐํํ์ฌ ์ต์ ์ ์์์ ์ ์ธ
- ์ฌ๊ทํจ์์์๋ ํ์ฌ ๋จ๊ณ์ ๋ฐ ์์น์ ๋ฐ๋ผ ์ต์ ํ์ ๋ฐํ
- ํ์ฌ ์ํ์ ๋ํ ๋ฉ๋ชจ์ด์ ์ด์ ๋ ์๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ, ๊ทธ๋๋ก ๋ฐํ
- ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ, ํจ์๋ฅผ ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ์ฌ ์ต์ ํ์ ๊ตฌํ์ฌ ๋ฉ๋ชจ์ด์ ์ด์ ํ ๋ฐํ
03. ๐ ๏ธ ์๋๋ณ ์์
1ํ์ฐจ
- ์ง์ ์ฌํญ์ ๋จ๊ณ(level)์ด 0๋ฒ์งธ๋ถํฐ ์ฝ์
๋๋๋ฐ, ์ฌ๊ท ํจ์์์ level์ ๋ํด์ฃผ๋ ๊ฒ์ผ๋ก ์ฒซ ๋ฒ์งธ ์ง์๋ฅผ ๋๊ฒจ๋ฒ๋ฆผ
-> 0๋ฒ์งธ๋ถํฐ ์ํํ ์ ์๋๋ก ์์
2ํ์ฐจ
04. ๐๏ธ ์ ๋ต ์ฝ๋
#include <bits/stdc++.h>
using namespace std;
const int INF = 1e8;
vector<int> orders;
const int weight[5][5] = {
{1, 2, 2, 2, 2},
{INF, 1, 3, 4, 3},
{INF, 3, 1, 3, 4},
{INF, 4, 3, 1, 3},
{INF, 3, 4, 3, 1}
};
int mem[int(1e5 + 1)][5][5];
int func(int level, int left, int right){
if(level == orders.size() - 1) return 0;
else if(left > 0 && left == right) return INF;
int &cache = mem[level][left][right];
if(cache != -1) return cache;
int next_level = level + 1;
int next_order = orders[level];
return cache = min(
func(next_level, next_order, right) + weight[left][next_order],
func(next_level, left, next_order) + weight[right][next_order]
);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
memset(mem, -1, sizeof(mem));
do{
int order;
cin >> order;
orders.push_back(order);
}while(orders.back() != 0);
cout << func(0, 0, 0) << "\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 1562 - ๊ณ๋จ ์ (0) | 2025.04.09 |
| [C++] BOJ 10422 - ๊ดํธ (1) | 2025.04.07 |
| [C++] BOJ 10815 - ์ซ์ ์นด๋ (0) | 2025.04.06 |
@ONE_ :: ์ ํธ์
์๋ชป๋ ์ ๋ณด๊ฐ ์๋ค๋ฉด ๋ง์ํด์ฃผ์ธ์!