Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- array
- ArrayList
- 등수구하기
- 연속부분수열
- Pointer
- 임시반장 정하기
- 투 포인터
- 최대 길이
- 보이는 학생
- java
- 가장 짧은 문자거리
- 큰 수 출력하기
- Two Pointer
- 10992
- 인프런
- 코테준비
- 모든행과열대각선의합
- 공통원소 구하기
- 아스키코드
- 자바
- 격자판
- 점수계산
- 뒤집은 소수
- 백준
- 배열
- 10991
- GitHub #Commit #BaekJoon
- 누적 계산
- 두 배열 합치기
- 알고리즘
Archives
- Today
- Total
ezhoon
[인프런] 07_08 송아지 찾기 (BFS : 상대트리탐색) 본문
[Java] 인프런 문제풀이/Recursive, Tree, Graph(DFS, BFS 기초)
[인프런] 07_08 송아지 찾기 (BFS : 상대트리탐색)
ezhoon 2022. 2. 15. 20:31📖 문제
- 첫 번째 줄에 현수의 위치 S와 송아지의 위치 E가 주어진다. 직선의 좌표 점은 1부터 10,000까지이다.
- 송아지는 움직이지 않고 제자리에 있다.
- 현수는 스카이 콩콩을 타고 가는데 한 번의 점프로 앞으로 1, 뒤로 1, 앞으로 5를 이동할 수 있다.
- 최소 몇 번의 점프로 현수가 송아지의 위치까지 갈 수 있는지 구하는 프로그램을 작성하세요.
⚠️ 주의사항
- BFS 이해
- 좌표가 1 ~ 10000 존재
- 송아지는 움직이지 않는다.
✍️ 이해
/**
* 1. 출발 지점인 s, 도착 지점 e 입력2
* 2. 1~10000 이므로 ch는 int[100001], 1,-1,5칸 배열 및 체킁요 배열 입력
* 3. Queue를 사용해서 s를 queue 추가
* 4. queue가 빈 공간이 될 때까지 반복
* 4-1. 길이를 queue.size()
* 4-2. 0 ~ len 까지 반복
* 4-2-1. x = queue.poll();
* 4-2-2. 0 ~ 3번 반복 (자식의 숫자가 3개까지 나오기 때문)
* 4-2-2-1. nx = x + dis[0~3]
* 4-2-2-2. nx == e -> return line + 1;
* 4-2-2-3. nx가 1보다 크거나 10000보다 작고 ch[nx] == 0 -> ch[nx] = 1, queue.offer(nx)
* 4-3. line++;
*/
✏️ 풀이
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
int[] dis = {1, -1, 5};
int[] ch; // 체크용 배열
Queue<Integer> queue = new LinkedList<>();
public int BFS(int s, int e) {
ch = new int[100001];
queue.offer(s);
int line = 0;
while (!queue.isEmpty()) {
int len = queue.size();
for (int i = 0; i < len; i++) {
int x = queue.poll();
for (int j = 0; j < 3; j++) {
int nx = x + dis[j]; // 자식 숫자들 +1 -1 +5
if (nx == e) return line + 1;
if (nx >= 1 && nx <= 10000 && ch[nx] == 0) {
ch[nx] = 1;
queue.offer(nx);
}
}
}
line++;
}
return 0;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
int s = sc.nextInt(); // 출발
int e = sc.nextInt(); // 도착
System.out.println(T.BFS(s, e));
}
}
'[Java] 인프런 문제풀이 > Recursive, Tree, Graph(DFS, BFS 기초)' 카테고리의 다른 글
[인프런] 07_11 그래프와 인접행렬 (0) | 2022.02.17 |
---|---|
[인프런] 07_09 ~ 10 Tree 말단노드까지의 가장 짧은 경로 (DFS, BFS) (0) | 2022.02.16 |
[인프런] 07_07 이진트리 레벨탐색 (0) | 2022.02.14 |
[인프런] 07_06 부분집합 구하기(DFS) (0) | 2022.02.13 |
[인프런] 07_05 이진트리순회 (0) | 2022.02.12 |
Comments