๋ฌธ์
์๋น์ด๋ ๋์๊ณผ ์จ๋ฐ๊ผญ์ง์ ํ๊ณ ์๋ค. ์๋น์ด๋ ํ์ฌ ์ N(0 ≤ N ≤ 100,000)์ ์๊ณ , ๋์์ ์ K(0 ≤ K ≤ 100,000)์ ์๋ค. ์๋น์ด๋ ๊ฑท๊ฑฐ๋ ์๊ฐ์ด๋์ ํ ์ ์๋ค. ๋ง์ฝ, ์๋น์ด์ ์์น๊ฐ X์ผ ๋ ๊ฑท๋๋ค๋ฉด 1์ด ํ์ X-1 ๋๋ X+1๋ก ์ด๋ํ๊ฒ ๋๋ค. ์๊ฐ์ด๋์ ํ๋ ๊ฒฝ์ฐ์๋ 1์ด ํ์ 2*X์ ์์น๋ก ์ด๋ํ๊ฒ ๋๋ค.
์๋น์ด์ ๋์์ ์์น๊ฐ ์ฃผ์ด์ก์ ๋, ์๋น์ด๊ฐ ๋์์ ์ฐพ์ ์ ์๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ด ๋ช ์ด ํ์ธ์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ ์๋น์ด๊ฐ ์๋ ์์น N๊ณผ ๋์์ด ์๋ ์์น K๊ฐ ์ฃผ์ด์ง๋ค. N๊ณผ K๋ ์ ์์ด๋ค.
์ถ๋ ฅ
์๋น์ด๊ฐ ๋์์ ์ฐพ๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
ํํธ
์๋น์ด๊ฐ 5-10-9-18-17 ์์ผ๋ก ๊ฐ๋ฉด 4์ด๋ง์ ๋์์ ์ฐพ์ ์ ์๋ค.
๋ฐฑ์ค ์ค๋ฒ1.
1. dfs์ธ์ค ์๊ณ ์ด์ฌํ ํ๋ค๊ฐ ์ฌ๊ท๊ฐ ๊ณ์ ํฐ์ ธ์ ์ด์ํจ์ ๋๋
2. bfs๋ก ํ์ด์ผ ํ๋ ๋ฌธ์ ์์ ^^.....
3. ์ ํ์๋ค๊ณ ์๊ฐํ๋๋ฐ ์ ์ถํ๋ OutOfBounds๊ฐ ๋ ๋ฒ๋ฆผ
4. ์ง๋ฌธ ๊ฒ์ํ์ ๋๋ ๋๊ฐ์ ์ฌ๋์ด ์์์. ํด~
ํ์ ์ฒดํฌํ ๋ ๋ฒ์ ์ฒดํฌ ๋จผ์ ํ๊ณ ๋์ visited ํ๋์ง ์ฒดํฌํด์ผ ๋ฒ์๋ฅผ ๋ฒ์ด๋์ง ์์!
๊ธฐ์ตํ์. ์กฐ๊ฑด๋ฐ์ง๋ ๋ฒ์ ์ฒดํฌ๊ฐ ์ฐ์ ์ด๋ค!!!
๋์ ํ์ด
#include <iostream>
#include <queue>
using namespace std;
int n;
int k;
int visited[100002]={0,};
bool canGo(int num){
if(num<0 || num>100000) return false; // ๋ฒ์๊ฒ์ฌ ๋จผ์ ํด์ผ outofbounds๊ฐ ๋จ์ง ์์
if(visited[num]==1) return false;
return true;
}
void bfs(int i){
int dist[100002] = {0,};
queue<int> q;
q.push(n);
visited[n] = 1;
while(!q.empty()){
int a = q.front();
q.pop();
if(canGo(a+1)){
q.push(a + 1);
visited[a + 1] = 1;
dist[a + 1] = dist[a] + 1;
}
if(canGo(a-1)){
q.push(a - 1);
visited[a - 1] = 1;
dist[a - 1] = dist[a] + 1;
}
if(canGo(a*2)){
q.push(a * 2);
visited[a * 2] = 1;
dist[a * 2] = dist[a] + 1;
}
}
cout << dist[k];
return;
}
int main(){
cin >> n >> k;
bfs(n);
}
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/BOJ] 1309 : ๋๋ฌผ์ (DP) (0) | 2023.02.23 |
---|---|
[C++/BOJ] 2225 : ํฉ๋ถํด (DP) (0) | 2023.02.23 |
[C++/BOJ] 14940 : ์ฌ์ด ์ต๋จ๊ฑฐ๋ฆฌ (BFS) / test case (0) | 2023.02.22 |
[C++/BOJ] 2149 : ์ํธ ํด๋ (0) | 2023.02.22 |
[C++/BOJ] 2293 : ๋์ 1 (0) | 2023.02.22 |