import java.io.*;
import java.util.*;
class Floor {
int num;
int cnt;
Floor(int num, int cnt) {
this.num = num;
this.cnt = cnt;
}
}
public class StartLink {
static BufferedReader br;
static StringTokenizer st;
static int f, s, g, u, d;
static Floor ans;
static boolean[] checked;
public static void main(String[] args) throws IOException{
input();
bfs();
if(ans == null) System.out.println("use the stairs");
else System.out.println(ans.cnt);
}
static void input() throws IOException {
br = new BufferedReader(new InputStreamReader(System.in));
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());
checked = new boolean[f+u+1];
}
static void bfs() {
//올라가거나 내려갈 수 없을 때
if((u == 0 && s < g) || (d == 0 && s > g)) return;
//갈 수 있다고 판단 되면 bfs로 몇번안에 갈 수 있는지 확인
Queue<Floor> q = new LinkedList<>();
q.add(new Floor(s, 0));
checked[q.peek().num] = true;
while(!q.isEmpty()) {
Floor cur = q.poll();
if(cur.num == g) {
ans = cur;
break;
}
if(cur.num + u <= f && !checked[cur.num+u]) {
q.add(new Floor(cur.num+u, cur.cnt+1));
checked[cur.num+u] = true;
}
if(cur.num - d > 0 && !checked[cur.num-d]) {
q.add(new Floor(cur.num-d, cur.cnt+1));
checked[cur.num-d] = true;
}
}
return;
}
}
간단한 bfs 문제였다. 하지만 엘리베이터로 올라갈 수 없는 경우를 전부 찾아서 예외 케이스로 빼낼려고 했으나 그냥 bfs로 방문체크를 해가면서 bfs가 끝난 상태에서 ans 변수에 답이 없고 null 상태라면 갈 수 없는 것이었다. 그래서 그냥 u나 d가 0일 때 올라갈 수 없거나 내려갈 수 없을 때만 예외를 주고 돌렸더니 맞았다. 그리고 54번 라인에서 0층은 없는데 범위 설정을 잘못해서 좀 해맸다.
'Dev > PS' 카테고리의 다른 글
[백준] 1806 부분합 java (0) | 2022.03.30 |
---|---|
[백준] 2580 스도쿠 java (0) | 2022.03.27 |
[백준] 3108 로고 java (0) | 2022.03.24 |
[백준] 1759 암호 만들기 java (0) | 2022.03.22 |
[백준] 2186 문자판 java (0) | 2022.03.21 |