단순 BFS 문제였다. *2를 할때는 cnt를 증가시키지않고 푸는것이 핵심
package Boj;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static int min = Integer.MAX_VALUE;
static int n, k;
static boolean[] visited;
static int max = 100000;
public static class Node {
int x;
int time;
public Node(int x, int time) {
this.x = x;
this.time = time;
}
}
public static void bfs() {
Queue<Node> q = new LinkedList<>();
q.offer(new Node(n, 0));
while(!q.isEmpty()) {
Node node = q.poll();
visited[node.x] = true;
if(node.x == k) min = Math.min(min, node.time);
if(node.x * 2 <= max && visited[node.x * 2] == false) q.offer(new Node(node.x * 2, node.time));
if(node.x + 1 <= max && visited[node.x + 1] == false) q.offer(new Node(node.x + 1, node.time + 1));
if(node.x - 1 >= 0 && visited[node.x - 1] == false) q.offer(new Node(node.x - 1, node.time + 1));
}
}
public static void main(String args[]) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
visited = new boolean[max + 1];
bfs();
System.out.println(min);
}
}
'Algorithm & Data Structures > BOJ' 카테고리의 다른 글
1446. 지름길 (Java) (1) | 2023.10.21 |
---|---|
1916. 최소비용구하기 (Java) (1) | 2023.10.20 |
2206. 벽부수고 이동하기 (Java) (0) | 2023.10.16 |
11404. 플로이드 (Java) (0) | 2023.10.12 |
9465. 스티커 (Java) (1) | 2023.10.12 |