설명
현수는 송아지를 잃어버렸다. 다행히 송아지에는 위치추적기가 달려 있다. 현수의 위치와 송아 지의 위치가 수직선상의 좌표 점으로 주어지면 현수는 현재 위치에서 송아지의 위치까지 다음 과 같은 방법으로 이동한다. 송아지는 움직이지 않고 제자리에 있다. 현수는 스카이 콩콩을 타고 가는데 한 번의 점프로 앞으로 1, 뒤로 1, 앞으로 5를 이동할 수 있다. 최소 몇 번의 점프로 현수가 송아지의 위치까지 갈 수 있는지 구하는 프로그램을 작성 하세요.
입출력
첫 번째 줄에 현수의 위치 S와 송아지의 위치 E가 주어진다. 직선의 좌표 점은 1부터 10,000 까지이다.
점프의 최소횟수를 구한다. 답은 1이상이며 반드시 존재합니다.
예시
5 14
3
풀이
1. 반드시 체크배열 써서 nx를 구하고 check[nx]=1처리 해주어야한다. 안하면 시간초과남
2. bfs를 쓰면 최소횟수를 구할수 있다.
import java.util.*;
class Main {
int[] check = new int[10001];
int[] moves= {1,-1,5};
public int BFS(int s, int e) {
int answer=0;
Queue<Integer> queue= new LinkedList<>();
check[s]=1;
queue.add(s);
int level=0;
while(!queue.isEmpty()) {
int size = queue.size();
for(int i=0; i<size; i++) {
int cur=queue.poll();
for(int j=0; j<3; j++) {
int nx=cur+moves[j];
if(nx==e) {
return level+1;
}
if(nx>=0 && nx<=10000 && check[nx]==0) {
check[nx]=1;
queue.offer(nx);
}
}
}
level++;
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int s=kb.nextInt();
int e=kb.nextInt();
System.out.println(T.BFS(s, e));
}
}
'알고리즘기초 > 기초Dfs,Bfs' 카테고리의 다른 글
| 10. Tree 말단 노드까지의 가장 짧은 경로 (0) | 2022.09.27 |
|---|---|
| 09. Tree 말단 노드까지의 가장 짧은 경로 (0) | 2022.09.27 |
| 07. 이진트리 순회(넓이우선탐색 : 레벨탐색) (0) | 2022.09.26 |
| 06. 부분집합구하기(DFS) (0) | 2022.09.26 |
| 5. 이진 트리 순회(DFS) (0) | 2022.01.02 |