리뷰
BFS도 가능하지만 그리디 알고리즘으로 풀이가 가능하다.
문제 풀이
- b에서 a로 가는 방법으로 풀이한다.
- while루프의 조건은 a가 b보다 작거나 같을때 실행, cnt를 1 상승시키고 만약 a와 b가 같다면 루프를 종료한다.
- 현재 b의 뒷자리가 1이라면 b를 10으로 나눈 몫을 b로 갱신해 준다.
- 만약 b가 짝수라면 b를 2로 나눈 몫을 b로 갱신해 준다.
- 둘다 해당되지 않다면 -1을 출력하고 리턴한다.
- 중간에 리턴되지 않고 루프가 종료되었을때 a가 b보다 크다면 -1을, 아니라면 cnt를 출력한다.
참고 사항
while루프가 종료되는 경우는 다음과 같다.
- 1의 자리 뒤에 1을 붙이거나 2를 곱해도 a가 결코 b가 될 수 없을 때
- a가 b보다 커져서 루프가 종료 되었을 때
정답 코드
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
int cnt = 0;
while (a <= b) {
cnt++;
if (a == b) break;
if (b % 10 == 1) {
b /= 10;
continue;
}
else if (b % 2 == 0) {
b /= 2;
}
else {
cout << -1;
return 0;
}
}
if (a > b) cout << -1;
else cout << cnt;
}
728x90
'알고리즘 공부 > C++' 카테고리의 다른 글
백준 1261번 알고스팟 C++, 파이썬 (0) | 2024.07.27 |
---|---|
백준 1991번 트리 순회 C++ (0) | 2024.07.26 |
백준 1987번 알파벳 C++ (0) | 2024.07.25 |
백준 5555번 반지 C++ (0) | 2024.07.25 |
백준 9507번 Generations of Tribbles C++ (0) | 2024.07.25 |