[백준/Silver II] A → B - 16953

2024. 12. 19. 09:02·코딩 테스트 정복기/백준
반응형

[Silver II] A → B - 16953

문제 링크

성능 요약

메모리: 22564 KB, 시간: 204 ms

분류

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

제출 일자

2024년 12월 9일 17:18:21

문제 설명

정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.

  • 2를 곱한다.
  • 1을 수의 가장 오른쪽에 추가한다.

A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.

입력

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

출력

A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.

 

 

 

 

 


풀이 및 코드

연산은 2를 곱하거나 1을 더하거나 원래의 값이 더 커질 수 밖에 없다.

즉, 원래의 값이 B보다 크면 탐색을 이어갈 필요가 없다.

 

이 문제에서 주의해야 할 것은, A와 B의 범위가 10^9라는 것.

때문에 long 타입으로 계산해야한다.

import java.io.*;
import java.util.*;

public class Main {
    private static long bfs(int n, int target){
        if(n == target) return 1;
        Queue<long[]> queue = new LinkedList<>();
        queue.add(new long[]{n, 1L});
        long result = -1;
        long[] info;
        while(!queue.isEmpty()){
            info = queue.poll();
            // 다음 연산 결과가 target과 같으면 연산 값 return
            if(info[0] * 2 == target || info[0]*10+1 == target) return info[1]+1;
            // 연산 결과가 target보다 작을 때만 다음 연산 추가
            if(info[0] * 2 < target) queue.add(new long[]{info[0]*2, info[1]+1});
            if(info[0] * 10 + 1 < target) queue.add(new long[]{info[0]*10+1, info[1]+1});

        }
        return result;

    }


    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] input = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        br.close();
        System.out.print(bfs(input[0], input[1]));
    }
}

 

728x90
반응형

'코딩 테스트 정복기 > 백준' 카테고리의 다른 글

[백준/Gold V] 치킨 배달 - 15686 (Java)  (0) 2024.12.22
[백준/Gold IV] 행렬 제곱 - 10830 (Java)  (1) 2024.12.21
[백준/Silver II] N과 M (12) - 15666  (1) 2024.12.18
[백준/Silver III] N과 M (4) - 15652  (0) 2024.12.17
[백준/Gold V] 내려가기 - 2096  (0) 2024.12.16
'코딩 테스트 정복기/백준' 카테고리의 다른 글
  • [백준/Gold V] 치킨 배달 - 15686 (Java)
  • [백준/Gold IV] 행렬 제곱 - 10830 (Java)
  • [백준/Silver II] N과 M (12) - 15666
  • [백준/Silver III] N과 M (4) - 15652
settong
settong
    250x250
  • settong
    개 발 자 국
    settong
  • 전체
    오늘
    어제
    • 전체보기 (202)
      • Computer Science (50)
        • Network (7)
        • Operating System (18)
        • Data Structure (9)
        • Database (11)
        • Algorithm (5)
      • Language (17)
        • Java (17)
        • Javascript (0)
        • Python (0)
      • Devops (20)
        • AWS (0)
        • Naver Cloud (16)
        • CICD (3)
        • 웹 서버 관리 (1)
      • Front (0)
        • React (0)
      • Backend (5)
        • Spring (5)
      • 코딩 테스트 정복기 (110)
        • 백준 (51)
        • 프로그래머스 (53)
        • 기타 (6)
      • etc (0)
      • 경제 상식 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    해시
    백트래킹
    벨만포드
    완전탐색
    Spring Boot
    CI/CD
    github actions
    프로그래머스
    lcs
    DFS
    Network
    집합
    분할정복
    다이나믹프로그래밍
    ncp
    BFS
    ncp200
    백준
    ncp202
    다익스트라
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
settong
[백준/Silver II] A → B - 16953
상단으로

티스토리툴바