접근 방법
- BFS로 방문 가능한 층수 탐색
- 방문 가능이란 ?
- 방문한 적 없어야 한다.
- 현재층 + 위층버튼 ≤ 꼭대기층
- 현재층 - 아래버튼 ≥ 1층
- 스타트링크 층 도착 시 이동횟수 출력
- 방문 가능이란 ?
- 더 이상 이동가능한 층이 없으면 use the stairs
소스 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br;
static StringTokenizer st;
static int F, S, G, U, D;
static int[] visited;
static int answer;
public static void main(String[] args) 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());
visited = new int[F + 1];
answer = useElevator();
if (answer == -1) {
System.out.println("use the stairs");
} else {
System.out.println(answer-1);
}
}
private static int useElevator() {
Queue<Integer> queue = new LinkedList<>();
queue.offer(S);
visited[S] = 1;
while (!queue.isEmpty()) {
int curFloor = queue.poll();
if (curFloor == G) {
return visited[curFloor];
}
if (curFloor + U <= F && visited[curFloor + U] == 0) {
queue.offer(curFloor + U);
visited[curFloor + U] = visited[curFloor] + 1;
}
if (curFloor - D > 0 && visited[curFloor - D] == 0) {
queue.offer(curFloor - D);
visited[curFloor - D] = visited[curFloor] + 1;
}
}
return -1;
}
}
출처
'Algorithm' 카테고리의 다른 글
Baekjoon #2146 다리만들기 (java) (0) | 2021.04.10 |
---|---|
Baekjoon #2589 보물섬 (java) (0) | 2021.04.09 |
Baekjoon #2573 빙산 (java) (0) | 2021.04.04 |
Baekjoon #1389 케빈 베이컨의 법칙 (java) (0) | 2021.04.04 |
66th. CodeUp #3015 : 성적표 출력 (0) | 2020.12.26 |