https://www.acmicpc.net/problem/16953
#include<iostream>
using namespace std;
int main(){
int A;
int B;
int cnt = 0;
cin>>A>>B;
while(1){
if(A > B){
cout<<"-1"<<endl;
break;
}
if(A == B){
cnt++;
cout<<cnt<<endl;
break;
}
if(B % 2 == 0){
B = B / 2;
}else if(B % 10 == 1){
B--;
B = B / 10;
}else{
cout<<-1<<endl;
break;
}
cnt++;
}
return 0;
}
문제의 예제를 살펴보니,
A - > B가 되기위해 걸려진 조건들을
B - > A가 되도록, 반대로 생각하면된다.
while문을 통해 돌때마다 cnt를 세어준다.
그 틀 안에서 출력 값이 나오도록 조건문을 걸어주는 if를
while문 앞에다가 코드를 배치하였다.
B가 A가 되려면 그 수가 일단은 맨 끝자리가 홀수인지? 짝수인지? 1이 달려있는지? 부터 살펴봤다.
짝수면 일단은 2가 나눠지게 되고
그게 아니라면 나머지가 1인가를 살펴봤다.
그것도 아닌 경우에는 결국엔 -1를 도출한다.
여기서 중요한 점은
출력 값이 나오게하는 조건문 if를
B값에 영향을 주는 if문때문에 값이 다르게 나오지 않도록
잘 배치해주는게 이 문제의 키 포인트라고 생각한다.
'BOJ 백준 > Class 4' 카테고리의 다른 글
백준 1967번, 트리의 지름(C, C++) (0) | 2022.01.20 |
---|---|
백준 2096번, 내려가기(C, C++) (0) | 2022.01.20 |
백준 2263, 트리의 순회(C, C++) (0) | 2022.01.20 |
백준 2206번, 벽 부수고 이동하기(C, C++) (0) | 2022.01.20 |
백준 1504번, 특정한 최단 경로(C, C++) (0) | 2022.01.20 |