티스토리 뷰

반응형

https://www.acmicpc.net/problem/16953

 

16953번: A → B

첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.

www.acmicpc.net


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 그래프 이론
  • 그리디 알고리즘
  • 그래프 탐색
  • 너비 우선 탐색

 


 

⊙ 문제 접근 과정

 

이 문제를 보고 생각나는 문제가 하나 있었다.

 

 

[백준(BOJ)] 1463번 : 1로 만들기 - PYTHON[파이썬]

www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net ⊙ 문제 ⊙ 입력 ⊙ 출력 ⊙ 예제 입출력 ⊙ 알고리즘 분류..

tooo1.tistory.com

 

위 문제인데, 기억에 의하면 A->B가 아닌 반대인 B->A로 풀었었다.

 

이번 문제도 그렇게 풀었다.

 

나의 풀이는 끝자리가 1이면 1 삭제, 짝수면 2로 나누기, 1이 아닌 홀수면 break

마지막으로 A=B일시 결과 출력, A가 더 커질시 -1 출력

 


 

⊙ 문제 풀이

 

#include <iostream>
#include <string>

using namespace std;

int A,B;
int cnt=1;
string s;

int main() {
    cin>> A >> B;
    s=to_string(B);

    while(true) {
        if(s[s.length()-1]=='1') { //1로 끝날 때
            cnt++;
            s=s.substr(0,s.length()-1);
            B=stoi(s);
        }else if(!(B%2)){
            cnt++;
            B/=2;
            s=to_string(B);
        }else if(B%2) {
            cnt=-1;
            break;
        }
        
        if(A==B) break;
        else if (A>B) {
            cnt=-1;
            break;
        }
    }
    cout << cnt;

}

⊙ 결과

 


⊙ 마무리

 

 

NONE

 

좋아요 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함