코딍코딍
코딩기록
코딍코딍
전체 방문자
오늘
어제
  • 분류 전체보기 (271)
    • 개발 (2)
    • Java (1)
    • 스프링 (28)
    • JPA (11)
    • Git (3)
    • 알고리즘 (160)
      • 백준 (132)
      • 프로그래머스 (8)
      • SWEA (20)
    • 토이 프로젝트 (14)
      • 간단한 Springboot CRUD (1)
      • 게시판 프로젝트 (13)
    • 알고리즘 개념정리 (8)
    • 오류 해결 (13)
    • 보류 (0)
    • AWS (5)
    • 트러블 슈팅 (0)
    • 회고 (3)
    • CS (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

최근 글

티스토리

hELLO · Designed By 정상우.
코딍코딍

코딩기록

16953번 : A -> B
알고리즘/백준

16953번 : A -> B

2022. 6. 26. 16:23

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

 

16953번: A → B

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

www.acmicpc.net

 

 

문제

 

 

코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        int y = sc.nextInt();
        int n=1;

        while(x!=y && y!=0) {
            if(y%2==0) y/=2;
            else if((y-1)%10==0) y=(y-1)/10;
            else break;
            n++;
        }

        if(x!=y) System.out.print(-1);
        else System.out.print(n);
    }
}

 

 

해결방법

문제를 읽어보면 가능한 연산은 2가지가 나온다.

1. y=x*2
2. y=(x*10)+1

A는 1번과 2번의 연산으로 B를 만들어야 한다.

 

거꾸로 생각해보면 B를 1번과 2번의 연산의 반대로 계산하여 A를 만들 수 있다.

1. y/2=x
2. (y-1)/10=x

만약 위의 연산으로 B를 A로 만들 수 없다면 만들 수 없는 수므로 -1을 출력하면 되고 만들어진다면 연산의 횟수를 출력하면 된다. 1번과 2번 연산이 둘 다 가능한 수는 없으므로 조건문을 사용하면 쉽게 판별할 수 있다.

추가적으로 위의 연산으로 B가 0이 되는 경우가 있으므로 while문에 조건을 주고 탈출하여 -1을 출력하도록 하였다.

'알고리즘 > 백준' 카테고리의 다른 글

1049번 : 기타줄  (0) 2022.06.28
4796번 : 캠핑  (0) 2022.06.26
1439번 : 뒤집기  (0) 2022.06.26
10610번 : 30  (1) 2022.06.22
1789번 : 수들의 합  (0) 2022.06.22
    '알고리즘/백준' 카테고리의 다른 글
    • 1049번 : 기타줄
    • 4796번 : 캠핑
    • 1439번 : 뒤집기
    • 10610번 : 30
    코딍코딍
    코딍코딍
    ㅎ2

    티스토리툴바