[백준] A -> B 16953번 - Java

GoshK·2022년 2월 17일
0

[백준] Java

목록 보기
39/49
post-thumbnail

[백준] A -> B 16953번

나의 풀이

public class AtoB {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] items = br.readLine().split(" ");
        String a = items[0];
        String b = items[1];

        int answer = 1;
        while(Integer.parseInt(a) < Integer.parseInt(b)) {
            if(b.charAt(b.length() - 1) == '1') {
                b = b.substring(0, b.length() - 1);
                answer++;
            } else if(Integer.parseInt(b) % 2 == 0){
                b = String.valueOf(Integer.parseInt(b) / 2);
                answer++;
            } else {
                break;
            }
        }

        if(a.equals(b)) {
            System.out.println(answer);
        } else {
            System.out.println(-1);
        }
    }
}

a: 100
b: 200
ex) 40021 -> 4002 -> 2001 -> 200 -> 100

  • a부터 늘려가는 것이 아닌 b부터 줄여가는 방식으로 접근하였다.
  • b가 1로 끝나면 1을 제거해주고, b가 짝수라면 2로 나눠주고, b가 끝이 1이 아닌 홀수라면 답을 찾을 수 없다는 규칙을 찾아서 접근하였다.
  • 우선 a와 b값을 받아주고, answer는 처음 값과 마지막 값 모두 포함하기 때문에 1로 두고 정수형 a가 정수형 b보다 작은 동안 반복을 한다.
  • 우선 b의 마지막 문자가 1일 경우에는 substring을 사용하여 마지막 문자를 날려주고 answer를 1 증가시킨다.
  • 만약 b가 짝수라면 b를 2로 나눠주고 answer를 1 증가시킨다.
  • 만약 1로 끝나지도 않는 홀수, 즉 else라면 계산을 할 수 없는 숫자이기 때문에 반복을 종료한다.
  • 위 과정을 마치면 a 와 b의 값이 바뀌어 있을 것이다.
  • 만약 a의 값이 b와 같다면 answer를 출력하고, 아니라면 a를 가지고 b를 만들 수 없다고 판단하여 -1을 출력한다.

0개의 댓글