https://www.acmicpc.net/problem/16953
문제 풀이
'정수 A를 B로 바꾸려고 한다'라고 문제에 적혀있지만, 저는 B를 A로 만드는 최단경로라고 생각했다.
B가 2로 나눠지다면 나누고, 만약 나눠지지 않으면 마지막 수가 1인지를 확인하는 이 2가지를 생각했다.
만약 A == B가 된다면 bool find = true로 만든 후 while문을 종료했다.
소스 코드
#include <iostream>
using namespace std;
int main() {
int A, B;
int cnt = 0;
bool find = false;
cin >> A >> B;
while (B >= A) {
if (A == B) {
find = true;
break;
}
else {
if (B % 2 == 0) {
B /= 2;
cnt += 1;
}
else {
if (B % 10 == 1) {
B = B / 10;
cnt += 1;
}
else {
break;
}
}
}
}
if (find == true)
cout << cnt + 1 << '\n';
else
cout << "-1" << '\n';
}
'알고리즘' 카테고리의 다른 글
[백준] 1018번 체스판 다시 칠하기 C++ 문제풀이 (0) | 2023.08.29 |
---|---|
[백준] 1946번 신입 사원 C++ 문제풀이 (0) | 2023.08.21 |
[백준] 1783번 병든 나이트 C++ 문제풀이 (0) | 2023.08.18 |
[백준] 4796번 캠핑 C++ 문제풀이 (0) | 2023.08.17 |
[백준] 1439번 뒤집기 C++ 문제풀이 (0) | 2023.08.16 |