728x90
문제

풀이
전체 층수(F), 스타트링크 위치(G), 강호의 위치(S), 엘리베이터의 올라가는 수(U), 엘리베이터의 내려가는 수(D)를 입력받는다.
F크기의 방문을 확인하는 Integer 배열을 만든다.
queue를 선언하고 S를 추가한다.
S와 G가 같다면 0을 출력한다.
queue가 비어있을 때까지 반복하며 queue에서 값(q)을 꺼낸다. 위로 이동하는 범위(S+U), 아래로 이동하는 범위(S-D)를 구한다.
U나 F의 값이 0보다 크고 최대층수보다 작거나 같고 0보다 크고 배열의 해당 위치에 방문한적이 없다면 queue에 추가한다.
q가 G와 같으면 배열의 q위치값을 출력한다.
이동할 수 있는 모든 층을 탐색하는 동안 같지 않으면 "use the stairs"를 출력한다.
정답 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int F;
static int S;
static int G;
static int U;
static int D;
static Queue<Integer> queue = new LinkedList<>();
static int[] visited;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
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());
visited = new int[F + 1];
queue.add(S);
visited[S] = 0;
if(S == G) {
System.out.println(0);
return;
}
bfs();
if(visited[G] == 0) {
System.out.println("use the stairs");
return;
}
}
static void bfs() {
while(!queue.isEmpty()) {
int q = queue.poll();
if(q == G) {
System.out.println(visited[q]);
return;
}
int up = q + U;
int down = q - D;
// U가 0보다 크고 up이 최대층수보다 크지 않고 방문한적이 없다면
if(U > 0 && up <= F && visited[up] == 0) {
visited[up] = visited[q] + 1;
queue.add(up);
}
// F가 0보다 크고 down이 0보다 크고 방문한적이 없다면
if(F > 0 && down > 0 && visited[down] == 0) {
visited[down] = visited[q] + 1;
queue.add(down);
}
}
}
}
문의사항이나 피드백은 댓글로 남겨주세요.
'백준' 카테고리의 다른 글
[백준] 2573번: 빙산 - JAVA (0) | 2025.02.05 |
---|---|
[백준] 2468번: 안전 영역 - JAVA (0) | 2025.02.05 |
[백준] 1697번: 숨바꼭질 - JAVA (0) | 2025.02.05 |
[백준] 7569번: 토마토 - JAVA (0) | 2025.02.05 |
[백준] 2644번: 촌수계산 - JAVA (1) | 2025.02.05 |