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)}
이렇게 순서만 바꿨는데 통과했어요.
찜찜한데 이렇게 풀리는게 맞는건가요 아니면 테케가 부실한건가요.
댓글 0