1. 문제
5014번: 스타트링크
첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다.
www.acmicpc.net
2. 접근방법
너비를 넓혀 가며 탐색하는
bfs 중 가장 기초적인 형태의 문제
현재 위치에서 시작해서
위로 가는 것과 아래로 가는 것 두가지 분기로 나누어
넓혀 나가며 탐색하면 된다.
이미 도착한 장소는 그 후에 도착하는 것은 의미가 없으니
visit처리로 다시 방문 못하게 해주면 된다.
3. 자바 코드
package Gold;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class G5_5014스타트링크 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int F = Integer.parseInt(st.nextToken()); // 최대
int S = Integer.parseInt(st.nextToken()); // 현재
int G = Integer.parseInt(st.nextToken()); // 도착
int U = Integer.parseInt(st.nextToken()); // 위
int D = Integer.parseInt(st.nextToken()); // 아래
Queue<Integer> que = new LinkedList<Integer>();
que.offer(S);
boolean visit[] = new boolean[F + 1];
visit[S] = true;
int cnt = 0;
boolean flag = false;
gg:while (!que.isEmpty()) {
int size = que.size();
for (int i = 0; i < size; i++) {
int now = que.poll();
if (now == G) {
flag = true;
break gg;
}
int up = now + U;
if (up <= F && !visit[up]) {
visit[up] = true;
que.offer(up);
}
int down = now - D;
if ( down > 0 && !visit[down]) {
visit[down] = true;
que.offer(down);
}
}
cnt++;
}
System.out.println(flag? cnt:"use the stairs");
}
}
4. 마치며
별로 어렵지 않다
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준] 2151 거울설치 (0) | 2021.01.17 |
---|---|
[백준] 17140 이차원 배열과 연산 (0) | 2021.01.16 |
[백준] 19584 난개발 (0) | 2021.01.02 |
[백준] 20440 니가 싫어 싫어 너무 싫어 싫어 오지 마 내게 찝쩍대지마 (0) | 2020.12.31 |
[백준] 14503 로봇청소기 (2) | 2020.12.30 |