백준 16953 A -> B (Java, 자바)

jonghyukLee·2023년 5월 15일
0

이번에 풀어본 문제는
백준 16953번 A -> B 입니다.

📕 문제 링크

❗️코드

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

class Op {
    long num, count;

    public Op(long num, long count) {
        this.num = num;
        this.count = count;
    }
}
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        long a = Long.parseLong(st.nextToken());
        long b = Long.parseLong(st.nextToken());

        Queue<Op> pq = new PriorityQueue<>(new Comparator<Op>() {
            @Override
            public int compare(Op o1, Op o2) {
                if (o1.num == o2.num) return (int)(o1.count - o2.count);
                return (int)(o2.num - o1.num);
            }
        });
        pq.add(new Op(a, 1));

        long answer = -1;
        while (!pq.isEmpty()) {
            Op cur = pq.poll();

            if (cur.num == b) {
                answer = cur.count;
                break;
            }

            // 곱 2
            long multiValue = cur.num * 2;
            if (multiValue <= b) pq.add(new Op(multiValue, cur.count + 1));

            // 뒤에 1
            long addOne = (cur.num * 10) + 1;
            if (addOne <= b) pq.add(new Op(addOne, cur.count + 1));

        }
        System.out.print(answer);
    }
}

📝 풀이

주어진 두 연산 방식을 통해 A부터 B까지 도달할 수 있는 최소 연산 횟수를 구하는 문제입니다.
두 방법을 통해 A가 B까지 도달할 수 있도록 그래프 탐색 해주면 됩니다.
주의할 점은, 값의 범위가 생각보다 커서 자료형을 long을 사용해야 합니다.

profile
머무르지 않기!

0개의 댓글