https://www.acmicpc.net/problem/13549
๋ฌธ์
์๋น์ด๋ ๋์๊ณผ ์จ๋ฐ๊ผญ์ง์ ํ๊ณ ์๋ค. ์๋น์ด๋ ํ์ฌ ์ N(0 ≤ N ≤ 100,000)์ ์๊ณ , ๋์์ ์ K(0 ≤ K ≤ 100,000)์ ์๋ค. ์๋น์ด๋ ๊ฑท๊ฑฐ๋ ์๊ฐ์ด๋์ ํ ์ ์๋ค. ๋ง์ฝ, ์๋น์ด์ ์์น๊ฐ X์ผ ๋ ๊ฑท๋๋ค๋ฉด 1์ด ํ์ X-1 ๋๋ X+1๋ก ์ด๋ํ๊ฒ ๋๋ค. ์๊ฐ์ด๋์ ํ๋ ๊ฒฝ์ฐ์๋ 0์ด ํ์ 2*X์ ์์น๋ก ์ด๋ํ๊ฒ ๋๋ค.
์๋น์ด์ ๋์์ ์์น๊ฐ ์ฃผ์ด์ก์ ๋, ์๋น์ด๊ฐ ๋์์ ์ฐพ์ ์ ์๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ด ๋ช ์ด ํ์ธ์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ ์๋น์ด๊ฐ ์๋ ์์น N๊ณผ ๋์์ด ์๋ ์์น K๊ฐ ์ฃผ์ด์ง๋ค. N๊ณผ K๋ ์ ์์ด๋ค.
์ถ๋ ฅ
์๋น์ด๊ฐ ๋์์ ์ฐพ๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
ํ์ด
BFS ๋ฅผ ์ผ์ฐจ์ ๋ฒ์ ์ผ๋ก ๋๋ฆฌ๋๊ฑฐ๋ผ๋ ์ ์ ๋ฌ๋ผ์ง์ง ์๋๋ค.
๋ค๋ง ์์ ์ํ์ฐฉ์ค์ฒ๋ผ ์ ๋ต์ด ์ต์๊ฐ์ด ๋์ฌ ์ ์๋๋ก ์ฐ์ ์์๋ง ์ ์ค์ ํด์ฃผ์
// Authored by : seondal
// ํ์ด : https://whkakrkr.tistory.com/
// Co-authored by : -
//#include <bits/stdc++.h>
#include <iostream>
#include <queue>
using namespace std;
int n,k;
int dis[200002];
queue<int> q;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
for(int i=0; i<200000; i++) dis[i] = -1;
cin >> n >> k;
q.push(n);
dis[n] = 0;
while(!q.empty()) {
int cur = q.front();
q.pop();
// ์๊ฐ์ด๋
if(cur*2 < 200000 and dis[cur*2] == -1) {
dis[cur*2] = dis[cur];
q.push(cur*2);
}
for(int i=0; i<2; i++){
int next=0;
if(i==0) next = cur-1;
else if(i==1) next = cur+1;
if(next<0 or next>=200000) continue;
if(dis[next] != -1) continue;
dis[next] = dis[cur]+1;
q.push(next);
}
}
cout << dis[k];
}
/*
*/
์ํ์ฐฉ์ค
์ฒ์์๋ BFS ๋ฅผ 1์ฐจ์ ์์ง์ ์ผ๋ก ๋๋ฆฌ๋ฉด ๋๊ฒ ๊ตฌ๋ ํ๊ณ ํธํ๊ฒ ํ์๋ค.
while(!q.empty()){
int cur = q.front();
q.pop();
for(int dir=0; dir<3; dir++){
int next;
if(dir==0) next = cur+1;
else if(dir==1) next = cur-1;
else next = cur*2;
// ๋ต์ด ๋์๋ค!
if(next==k) {
cout << dis[cur]+1;
return 0;
}
if(next<0 || next>=200002) continue; // ๋ฒ์๋ฅผ ๋์ด์ฐ๋ค๋ฉด
if(dis[next] != -1) continue; // ์ด๋ฏธ ๋ฐฉ๋ฌธ ํ๋ค๋ฉด
if(dir==2) dis[next] = dis[cur]; // ์๊ฐ์ด๋
else dis[next] = dis[cur] + 1; // ๊ฑท๊ธฐ
q.push(next);
}
}
๊ทธ๋ฐ๋ฐ ํ๋ ธ์ต๋๋ค๊ฐ ๋จ๋๊ฒ์ด๋ค..
๊ทธ๋ฐ๋ฐ ์ ๋ง ์ด์ข๊ฒ๋ ๋ฑ ๋ด ๋ฌธ์ ์ ์ ์ง์ด์ฃผ๋ ์ง์์๋ต ์ด ์์๋ค.
https://www.acmicpc.net/board/view/81912
๋ฐ๋ก
4 6
์ค๋ต : 2
์ ๋ต : 1
๊ทธ๋ ๋ค.
์๊ฐ์ ์ต์ํํด์ผํ๊ธฐ ๋๋ฌธ์
์๊ฐ์ด๋์ ์ฐ์ ์ ์ผ๋ก ํด์ผํ๋๊ฒ
์ํ์ฐฉ์ค 2
ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ
์ง์ฅ์ OutOfBounds ..
๋ฒ์๋ ์ ์ ํด์ฃผ๊ณ ์กฐ๊ฑด๋ ์ ์ ํ๋๋ฐ ์ ๋จ๋์ง ์ ๋ง ๊ถ๊ธํ๋ค
if(dis[cur*2] == -1 and cur*2 < 200000) {
dis[cur*2] = dis[cur];
q.push(cur*2);
}
์์ธ ์ฐพ์...
์ผํธ์ํทใ ใ ใ ใ ใ ใ ใ ใ
if์ ์์ ์กฐ๊ฑด์ด ์ฌ๋ฌ๊ฐ๋ฉด ์ ์กฐ๊ฑด์ ๋จผ์ ์ํํ๊ณ
ํด๋น ์กฐ๊ฑด์ด true ์ด๋ฉด ๋ค์ ์กฐ๊ฑด์ ํ์ธ
ํด๋น ์กฐ๊ฑด์ด false ์ด๋ฉด ๋ค์ ์กฐ๊ฑด์ ํ์ธํ์ง๋ ์๊ณ ๊ทธ๋ฅ ๋์ด๊ฐ๋ค
๊ทธ๋ ๋ค.. dis[cur*2] ์์ ๋ฒ์๋ฅผ ๋์ด๋ฒ๋ฆฌ๋ ๋ฐํ์์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ...
ํ์ธ์.. ์ํ์ ใ ใ ใ ใ ใ ใ
'๐ Baaaaaarking > 0x09๊ฐ - BFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 9466๋ฒ: ํ ํ๋ก์ ํธ (0) | 2023.05.04 |
---|---|
[BOJ G4][C++] ๋ฐฑ์ค 1600๋ฒ : ๋ง์ด ๋๊ณ ํ ์์ญ์ด (๋ฉ๋ชจ๋ฆฌ์ด๊ณผ๋๋ฌด์ซ์ด) (0) | 2022.04.17 |
[BOJ G4][C++] ๋ฐฑ์ค 2573๋ฒ: ๋น์ฐ (0) | 2022.04.15 |
[BOJ G4][C++] ๋ฐฑ์ค 2206๋ฒ : ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ (0) | 2022.04.13 |
[BOJ S1][C++] 2468๋ฒ: ์์ ์์ญ (76%) (0) | 2022.04.07 |