✅️[문제]
https://www.acmicpc.net/problem/1697
✅️[풀이]
❗️주의할점은 인덱스가 200000을 넘기면 안된다는 것이다! 인덱스가 200000을 넘어가면 OutofBound 에러가 생기므로 주의하자.
✅️ 각각의 좌표마다 +1, -1, ×2를 해주어 좌표를 누적하여 더한후, k에 도달하면 출력해주면 된다!
✅️[코드]
#include <bits/stdc++.h>
using namespace std;
int arr[2000100];
int t[3] = {-1, 1, 2};
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
queue<int> q;
int n,k;
cin >> n >> k;
arr[n] = 1;
q.push(n);
while(!q.empty()){
if(arr[k]) break;
int x = q.front(); q.pop();
for(int i=0; i<3; i++){
if(i == 2 && x*t[i] <= 200000 && !arr[x*t[i]]) {
arr[x*t[i]] = arr[x] + 1;
q.push(x*t[i]);
}
else if(i<2 && x+t[i] >= 0 && x+t[i] <=200000 && !arr[x+t[i]]){
arr[x+ t[i]] = arr[x] +1;
q.push(x+t[i]);
}
}
}
cout << arr[k] - 1;
}
✅️[소감]
이런 문제가 오히려 내게 까다로운 것 같다😭
'✏️ Algorithm > 알고리즘 풀이' 카테고리의 다른 글
1012번 유기농 배추 - C++ (0) | 2022.07.31 |
---|---|
10026번 적록색약 - C++ (0) | 2022.07.31 |
7576번 토마토 - C++ (0) | 2022.07.29 |
4179번 불! - C++ (0) | 2022.07.29 |
2504번 괄호의 값 - C++ (0) | 2022.07.27 |