for 범위 기반 임시 초기화 리스트를 이용해서 푼게 핵심이다.
#include <limits.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
int dist[100002];
int n, k;
int main()
{
ios::sync_with_stdio(0); cin.tie(0);
fill(dist, dist + 100001, -1);
cin >> n >> k;
dist[n] = 0;
queue<int> q;
q.push(n);
while (dist[k] == -1)
{
int cur = q.front(); q.pop();
for (int nxt : {cur - 1, cur + 1, cur * 2})
{
if (nxt < 0 ||
nxt > 100000)
continue;
if (dist[nxt] != -1)
continue;
dist[nxt] = dist[cur] + 1;
q.push(nxt);
}
}
cout << dist[k];
return 0;
}
'코딩테스트 > 백준' 카테고리의 다른 글
[골4] 14502 - 연구소 (0) | 2022.12.12 |
---|---|
[실1] 1074 - Z (0) | 2022.12.07 |
[골5] 2170 - 선 긋기 (0) | 2022.11.23 |
[실1] 9465 - 스티커 (0) | 2022.11.19 |
[골4] 9252 - LCS 2 (0) | 2022.11.18 |