• Home

My Codegate

  • Home

백준 16953 A -> B 자바 문제풀이

2024/01/08 Posted by Codegate Java No Comments

문제 링크

문제 내용은 입력으로 값 두 개를 받아서 왼쪽 값으로 오른쪽 값을 만들어야 하는데 사용 가능한 방법은 2를 곱하는 방법 혹은 우측에 1을 붙이는 방법만 사용할 수 있다(더하는거 아님), 이후 위 방법을 통해 성공했으면 성공 횟수 +1을 출력하고, 실패했을 경우에는 -1을 출력해주면 끝이다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {

  static int target, ans;
  static boolean status;

  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int[] split = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
    target = split[1];
    dfs(Long.valueOf(split[0]), 0);
    if (status) {
      System.out.println(ans + 1);
    } else {
      System.out.println(-1);
    }
  }


  public static void dfs(Long current, int count) {
    if (current > target) {
      return;
    } else if (current == target) {
      ans = count;
      status = true;
      return;
    }
    dfs(current * 2, count + 1);
    dfs(Long.valueOf((current.toString() + "1")), count + 1);
  }

}

경우의 수가 너무나도 많기 때문에 DFS를 사용해줘야 하는데, 어렵게 생각할 필요 없이 현재 값과, 시도 횟수를 넣어 DFS를 호출한 후 현재 값에 * 2, 뒤에 1을 붙이는 방법을 계속 시도해주면 되는데

재귀를 통해 모든 수마다, *2, 뒤에 1 붙이기를 계속 수행해주면서 현재 값이 목표값보다 커졌다면 중단하고, 같은 값이 있을 경우에는 해당 횟수를 넣어주고, boolean을 통해 있다고 처리해준 뒤

DFS가 모두 끝나고 나면 최소 횟수를 찾았을 경우에는 횟수 + 1을 출력해주고 그 외에는 -1을 출력해주면 끝이다.

No Comments
0

Leave a Reply Cancel Reply

Introduction

My Codegate

Latest Posts

  • Google Search Console API 연동방법
  • 인텔리제이 Gradle Dependency 최신 버전 보는 방법
  • Wallet-Tracker 개발일지
  • Moralis API 자바로 호출방법
  • IntelliJ Commit 후 Push 따로 하는 방법

Categories

  • My Project (4)
  • Java (42)
  • Algorithm (161)
    • Java (152)
    • Algorithm Knowledge (3)
    • Algorithm site usage (6)
  • Vue.js (1)
  • Spring (4)
  • Docker (2)
  • IntelliJ (20)
  • Uncategorized (7)

Recent Comments

  • Codegate on Hello world!
  • A WordPress Commenter on Hello world!

© 2025 — mycodegate.com

Prev Next