Algorithm
백준_스타트 링크_5014
Young_J
2021. 3. 6. 18:37
// 알고리즘
1. dfs 탐색
2. 건물 층 수 만큼의 방문배열 생성 v
3. 방향 배열생성 dr {U, -D}
4. bfs 탐색 시작. 도착하면 종료
더보기
import java.util.*;
import java.io.*;
public class Main {
static int F, S, G, U, D, ans;
static boolean[] v;
static int[] dr;
static class Point {
int start, cnt, state;
public Point(int start, int cnt, int state) {
this.start = start;
this.cnt = cnt;
this.state = state;
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
F = Integer.parseInt(st.nextToken()); // 전체 층
S = Integer.parseInt(st.nextToken()); // 현재 층
G = Integer.parseInt(st.nextToken()); // 도착 층
U = Integer.parseInt(st.nextToken()); // 위
D = Integer.parseInt(st.nextToken()); // 아래
ans = Integer.MAX_VALUE;
dr = new int[2];
dr[0] = U;
dr[1] = -D;
v = new boolean[F+1];
cal();
System.out.println(ans == Integer.MAX_VALUE ? "use the stairs" : ans);
}
private static void cal() {
Queue<Point> q = new LinkedList<>();
v[S] = true;
q.add(new Point(S, 0, 1));
Point p = null;
while (!q.isEmpty()) {
p = q.poll();
if (p.start == G) {
ans = p.cnt;
break;
}
for (int k = 0; k < 2; k++) {
int r = p.start + dr[k];
if (r <= 0 || r > F || v[r]) continue;
v[r] = true;
q.add(new Point(r, p.cnt + 1,0));
}
}
}
}
※ 1차원 배열의 탐색문제라서 쉽게 풀었음. 방문체크만 잘 해주면 풀 수 있는 문제인거같다.