반응형
BFS를 활용하는 문제이다.
BFS를 활용한다면 큐를 생각해낸다.
그리고 while문을 사용하여 계속해서 뻗어나가는 그림을 생각하자.
import java.awt.Point;
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 A, B, N, M, result = 0;
static boolean[] visited = new boolean[100001];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
A = Integer.parseInt(st.nextToken());
B = Integer.parseInt(st.nextToken());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
bfs();
System.out.println(result);
}
static void bfs() {
Queue<Point> queue = new LinkedList<Point>();
queue.add(new Point(N, 0));
visited[N] = true;
while (!queue.isEmpty()) {
Point po = queue.poll();
if (po.x == M) {
result = po.y;
return;
}
if (po.x + 1 < 100001 && !visited[po.x + 1]) {
visited[po.x + 1] = true;
queue.add(new Point(po.x + 1, po.y + 1));
}
if (po.x - 1 >= 0 && !visited[po.x - 1]) {
visited[po.x - 1] = true;
queue.add(new Point(po.x - 1, po.y + 1));
}
if (po.x + A < 100001 && !visited[po.x + A]) {
visited[po.x + A] = true;
queue.add(new Point(po.x + A, po.y + 1));
}
if (po.x + B < 100001 && !visited[po.x + B]) {
visited[po.x + B] = true;
queue.add(new Point(po.x + B, po.y + 1));
}
if (po.x - A >= 0 && !visited[po.x - A]) {
visited[po.x - A] = true;
queue.add(new Point(po.x - A, po.y + 1));
}
if (po.x - B >= 0 && !visited[po.x - B]) {
visited[po.x - B] = true;
queue.add(new Point(po.x - B, po.y + 1));
}
if (po.x * A < 100001 && !visited[po.x * A]) {
visited[po.x * A] = true;
queue.add(new Point(po.x * A, po.y + 1));
}
if (po.x * B < 100001 && !visited[po.x * B]) {
visited[po.x * B] = true;
queue.add(new Point(po.x * B, po.y + 1));
}
}
}
}
반응형
'코딩테스트 > Java' 카테고리의 다른 글
[JAVA] 백준 가장 긴 증가하는 수열 (0) | 2022.01.10 |
---|---|
[JAVA] 백준 구간 합 구하기 5 (0) | 2021.12.21 |
[JAVA] 백준 양 (0) | 2021.12.14 |
[JAVA] 백준 동전1 (0) | 2021.11.18 |
[JAVA] 프로그래머스 폰켓몬 (0) | 2021.11.05 |