• 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;
}