https://www.acmicpc.net/problem/16953
BFS 백트랙킹 ➡️ 최소비용 구하기
🔅 모든 경우를 다 보는 게 아니라❌, 도달 가능성🙆🏻♂️ 있는 것만 큐에 넣음
질문 | 답변 |
---|---|
DFS인가요, BFS인가요? | ✔️ BFS입니다. 최단 거리(연산 수 최소)를 요구하니까요. |
왜❓ DFS가 아닌가요❓❓ | DFS는 먼저 도착한 경로가 최단 보장되지 않음. BFS는 도착 즉시 최단 보장됨 |
백트래킹은 어디서 나오나요? | 조건을 만족하지 않으면 탐색 중단 → 분기 제거가 백트래킹처럼 동작 |
package com.example.algorithm.graph.BFS;
import java.io.*;
import java.util.*;
public class BJN_16953 {
static class Node {
long num;
int step;
public Node(long num, int step) {
this.num = num;
this.step = step;
}
}
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());
Set<Long> visited = new HashSet<>();
Queue<Node> queue = new LinkedList<>();
queue.offer(new Node(a, 1));
while (!queue.isEmpty()) {
Node cur = queue.poll();
if (cur.num == b) {
System.out.println(cur.step);
return;
}
if (cur.num > b || !visited.add(cur.num)) {
continue;
}
queue.offer(new Node(cur.num * 2, cur.step + 1));
queue.offer(new Node(cur.num * 10 + 1, cur.step + 1));
}
System.out.println(-1);
}
}