[[TableOfContents]] = ì˜¤ëŠ˜ì˜ ë¬¸ì œ = * [https://www.acmicpc.net/problem/1697|숨바ê¼ì§ˆ] = ì°¸ê°€ìž = * 15ì´ì›ì¤€ * ë°•ì¸ì„œ * [ê³½ì •í ] = 코드 = == 15ì´ì›ì¤€ == {{{ #include<iostream> #include<cmath> #include<algorithm> #include<queue> #include<utility> using namespace std; int main(){ int arr[100001] = {0,}; int N, M, ans; queue<pair<int, int>> que; cin>> N >> M; if(N >= M){ cout<< N - M << endl; return 0; } que.push(make_pair(N, 0)); while(que.front().first != M){ int n, dep; n = que.front().first; dep = que.front().second; que.pop(); if(n-1 >= 0 && !arr[n-1]){ arr[n-1] = 1; que.push(make_pair(n - 1, dep + 1)); } if(n+1 <= 100000 && !arr[n+1]){ arr[n+1] = 1; que.push(make_pair(n + 1, dep + 1)); } if(n * 2 <= 100000 && !arr[n*2]){ arr[n*2] = 1; que.push(make_pair(n * 2, dep + 1)); } } cout<< que.front().second << endl; } }}} == ë°•ì¸ì„œ == {{{ #include <iostream> #include <queue> typedef std::pair<int, int> pair_int; std::queue<pair_int> q; bool visit[200001]; int main() { int s, e; std::cin >> s >> e; if (s < e) { q.push(pair_int(s, 0)); while (q.front().first != e) { pair_int tq = q.front(); if (tq.first < e && !visit[tq.first * 2]) q.push(pair_int(tq.first * 2, tq.second + 1)), visit[tq.first * 2] = true; if (tq.first < e && !visit[tq.first + 1]) q.push(pair_int(tq.first + 1, tq.second + 1)), visit[tq.first + 1] = true; if (tq.first > 0 && !visit[tq.first - 1]) q.push(pair_int(tq.first - 1, tq.second + 1)), visit[tq.first - 1] = true; q.pop(); } std::cout << q.front().second; } else std::cout << s - e; return 0; } }}} == ê³½ì •í == = ì•„ì´ë””ì–´ = == 15ì´ì›ì¤€ == == ë°•ì¸ì„œ == * 기본ì ì¸ ì•„ì´ë””어는 Queue를 ì´ìš©í•œ BFSì´ë‹¤. * 단 너무 숫ìžê°€ 커지면 안ë˜ë¯€ë¡œ, 200000ì´ ë„˜ì–´ê°€ë©´ ì œí•œì„ í•œë‹¤. * ê·¸ë¦¬ê³ ë’¤ë¡œ ê°ˆ 경우 ê°ˆ 수 있는 ë°©ë²•ì€ -1ë°–ì— ì—†ìœ¼ë¯€ë¡œ ê·¸ ê²ƒì„ ì˜ˆì™¸ 처리 해준다. == ê³½ì •í ==