- toc {:toc}
๐ฆ16928: ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์
[์๊ณ ๋ฆฌ์ฆ ํ์ด] ๊ฐ๋๊ท
Reviewed by Kade Kang (devkade12@gmail.com)
Reviewed:: 2024-02-06
๋ฌธ์ ํ์ธํ๊ธฐ
ํ์ด
์๊ณ ๋ฆฌ์ฆ ํ์ด๋ฅผ ๊ฒ์ํด๋ณด๋ฉด์ ์๋ฌธ๋์ด ํธ์๋ ํ์ฒ๋ผ ๋๋์ด์ ์ฝ๋๋ฅผ ์ง๋ดค๋๋ฐ ๋ช ์์ ์ผ๋ก ๋๋๋ ๋นผ๋จ๋ฆฌ์ง ์๊ณ ์๊ฐํ ์ ์์ด์ ์ฐ์ตํ๊ธฐ ์ข์ ๊ฒ ๊ฐ๋ค. ๋น๋ถ๊ฐ์ ์ด๋ ๊ฒ ์ ์งํด๋ด์ผ๊ฒ ๋ค.
- ์ต์๊ฐ์ ๊ตฌํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ BFS๋ก ํ์ดํ๊ณ ๊ฐ์ฅ ๋จผ์ ๋ต์ด ๋์ค๋ฉด ์ค๋จํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
- 1~6๊น์ง์ ์ซ์๋ฅผ ๋ํ๊ณ ๋ฐฉ๋ฌธ ์ฒดํฌ, ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด ์ด๋ํด์ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค. ์ด๋ ์ฌ๋ค๋ฆฌ, ๋ฑ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ค๋ฉด ์ฌ๋ค๋ฆฌ, ๋ฑ์ ํตํด ์ด๋ํ ํ์ ๋ฐฉ๋ฌธ ์ฒดํฌํ๋ ๊ฒ์ด ์๋, ์ด๋ ์ ์ ๋ฐฉ๋ฌธ ์ฒดํฌ๋ฅผ ํ๋ค.
- ์ฃผ์ํ ์ ์ 1~6 ์ฃผ์ฌ์๋ฅผ ๋ฐ๋ณตํด์ ๋์ง ๋ ์ค๋ณต๋์ด ์ฃผ์ฌ์๋ ์ด์ ๊ฐ์ด ๋ํด์ง๋ ๊ฒฝ์ฐ๋ ์๋ ์ง๋ฅผ ์ฒดํฌํด์ผ ํ๋ค.
#include <iostream>
#include <vector>
#include <queue>
#define endl '\n';
using namespace std;
int snake[101];
int ladder[101];
int vis[101];
int n, m;
queue<pair<int, int>> q;
void Input(){
cin >> n >> m;
int val;
for(int i=0; i<n; i++){
cin >> val;
cin >> ladder[val];
}
for(int i=0; i<m; i++){
cin >> val;
cin >> snake[val];
}
}
int game(){
int start = 1;
vis[start] = 1;
q.push({0, start});
int prev_roll, prev;
while(!q.empty()){
auto info = q.front(); q.pop();
prev_roll = info.first;
prev = info.second;
if(prev == 100) return prev_roll;
for(int i=1; i<=6; i++){
int cur = prev + i;
int cur_roll = prev_roll + 1;
if(vis[cur] == 1 || cur > 100 || cur < 1) continue;
vis[cur] = 1;
if(ladder[cur] != 0){
cur = ladder[cur];
}
else if(snake[cur] != 0){
cur = snake[cur];
}
q.push({cur_roll, cur});
}
}
}
void Solution(){
cout << game() << endl;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
Input();
Solution();
return 0;
}