https://www.acmicpc.net/problem/13549

Baekjoon Online JudgeBaekjoon Online Judgewww.acmicpc.net



#include <bits/stdc++.h>


using namespace std;


int n, k;

bool visited[200005]; // visited[i] : i칸 방문함?

int moved[200005]; // moved[i] : i칸까지 이동하는데 걸린 시간.


void bfs(int n)

{

queue<int>q;

q.push(n);

visited[n] = true;

while (!q.empty())

{

int cur = q.front();

q.pop();

for (auto nxt : { make_pair(cur * 2,0) ,make_pair(cur - 1, 1), make_pair(cur + 1,1)}) // 계산된 다음 위치, 걸리는 시간.

{

if (nxt.first < 0 || nxt.first >200000) continue;

if (visited[nxt.first]) continue;

visited[nxt.first] = true;

moved[nxt.first] = moved[cur] + nxt.second;

q.push(nxt.first);


}

}

}


int main() {

ios::sync_with_stdio(0);

cin.tie(0);


cin >> n >> k;


bfs(n);


cout << moved[k];


return 0;

}


for (auto nxt : { make_pair(cur * 2,0) ,make_pair(cur - 1, 1), make_pair(cur + 1,1)}) // 계산된 다음 위치, 걸리는 시간.
이 부분에서

{ make_pair(cur - 1, 1), make_pair(cur + 1,1), make_pair(cur * 2,0)}
이거일 때는 안되는데.
1 4 => 1 정답:0
1 2 => 1 정답:0

{ make_pair(cur * 2,0) ,make_pair(cur - 1, 1), make_pair(cur + 1,1)}
이렇게 순서만 바꿨는데 통과했어요.
찜찜한데 이렇게 풀리는게 맞는건가요 아니면 테케가 부실한건가요.