Tany
백문이불어일Tany
Tany
전체 방문자
오늘
어제
  • 분류 전체보기 (197)
    • JAVA TPC (1)
    • JAVA (10)
    • CS (3)
    • SPRING (5)
    • DFS BFS (12)
    • SQL (7)
    • 알고리즘 정리 (76)
    • Git, Github (3)
    • 학습 계획 (36)
    • 코드스쿼드 학습일지 (19)
    • Servlet (5)
    • VPC (2)
    • AWS (4)
    • JPA (5)
    • 취미생활 (2)
    • 프로젝트 기록 (7)
      • Issue Tracker 삽질 기록 (5)
      • 당근마켓 API 서버 기록 (2)
      • 나만의 블로그 제작 기록 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 인프런
  • 면접을 위한 CS 전공지식 노트
  • 파이썬
  • EC2
  • JPA
  • github
  • MVC
  • 완전탐색
  • 프로그래머스
  • Stack
  • 주간 학습 계획
  • 문자열
  • 자료구조
  • 재귀
  • 이코테
  • java
  • JSP
  • GIT
  • BFS
  • sql
  • dfs
  • AWS
  • hash
  • 정렬
  • 백준
  • 이분탐색
  • MySQL
  • 알고리즘
  • 자바
  • 해시

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Tany

백문이불어일Tany

자바(Java) 알고리즘 문제풀이 A->B [백준 / DFS]
DFS BFS

자바(Java) 알고리즘 문제풀이 A->B [백준 / DFS]

2022. 9. 5. 15:42

출처 - 구글 이미지

 

 

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

 

16953번: A → B

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

www.acmicpc.net

 

 

풀이 코드

DFS 기본 문제와 아주 유사한 완전탐색 문제이다. 

if-else 구문을 사용해서 if 절에는 출력 값을 결정해주는 탈출 구문을 작성하고 else 절에서 DFS() 를 두 가지 방식으로 호출하면 된다.

유의할 점은, 1을 수의 가장 오른쪽에 추가하는 부분인데 반례에 int 범위를 넘어가는 수가 나오므로 A 는 int 가 아닌 long 타입으로 받자.

그리고 StackOverFlow 예외를 방지하기 위해 재귀 호출 시 A 가 B 보다 큰 경우는 탐색할 필요가 없으므로 빠져나오도록 구현했다.

마지막으로 count 가 그대로 0 이라면 B 가 되는 아무런 방법이 없다는 뜻이므로 -1 를 출력하도록 하면 끝.

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

public class Main {
    static long a;
    static int b;
    static int count;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        a = Long.parseLong(st.nextToken());
        b = Integer.parseInt(st.nextToken());

        DFS(a, 1);

        if (count == 0) {
            System.out.println(-1);
        } else {
            System.out.println(count);
        }
    }

    private static void DFS(long a, int depth) {
        // if 구문에서 탈출조건 부여
        if (a == b) {
            count = depth;
            return;

        // 2가지의 경우로 depth 를 증가시키면서 완전탐색하도록 로직 작성
        } else {
            if (a > b) {
                return;
            } else {
                DFS(a * 2, depth + 1);
                DFS(Long.parseLong(String.valueOf(a) + 1), depth + 1);
            }
        }
    }
}

// 2를 곱하너가 1을 수의 가장 오른쪽에 추가하는 방법 2가지
// A 를 B 로 바꾸는데 필요한 연산의 최솟값은 ?

'DFS BFS' 카테고리의 다른 글

자바(Java) 알고리즘 문제풀이 섬의 갯수 [백준 / DFS]  (0) 2022.09.06
자바(Java) 알고리즘 문제풀이 토마토 [인프런 / BFS]  (0) 2022.09.05
자바(Java) 알고리즘 문제풀이 음식물 피하기 [백준 / DFS]  (0) 2022.09.05
자바(Java) 알고리즘 문제풀이 전쟁 - 전투 [백준 / DFS]  (0) 2022.09.02
자바(Java) 알고리즘 문제풀이 인접행렬 경로탐색 [인프런 / 모든 조합 유형]  (0) 2022.08.30
    'DFS BFS' 카테고리의 다른 글
    • 자바(Java) 알고리즘 문제풀이 섬의 갯수 [백준 / DFS]
    • 자바(Java) 알고리즘 문제풀이 토마토 [인프런 / BFS]
    • 자바(Java) 알고리즘 문제풀이 음식물 피하기 [백준 / DFS]
    • 자바(Java) 알고리즘 문제풀이 전쟁 - 전투 [백준 / DFS]
    Tany
    Tany
    내가 보려고 만드는 백엔드 기록장 Github https://github.com/juni8453

    티스토리툴바