5014번 : 스타트링크 [Java]

2021. 4. 11. 18:15Algorithm/백준

반응형

https://www.acmicpc.net/problem/5014

 

5014번: 스타트링크

첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다.

www.acmicpc.net

해결 방안

bfs를 이용하여 갈 수 있는 층이라면 탐색한다. 방문 체크를 통해 이미 간 곳이라면 가지 않도록 한다.

 

주의할 점

1 1 1 1 1과 같이 지금 있는 곳이 이동할 곳과 같은 경우를 고려하지 않아 틀렸다,, 모든 예외 경우를 생각해보자,,

 

전체 코드

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {
	static int F, S, G, U, D;
	static int ans = -1;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		F = sc.nextInt(); 
		S = sc.nextInt(); 
		G = sc.nextInt(); 
		U = sc.nextInt(); 
		D = sc.nextInt(); 

		Queue<int[]> queue = new LinkedList<>();
		boolean[] visited = new boolean[F + 1];
		queue.add(new int[] { S, 0 });

		while (!queue.isEmpty()) {
			int[] temp = queue.poll();

			if (visited[temp[0]])
				continue;
			if (temp[0] == G) {
				ans = temp[1];
				break;
			}

			visited[temp[0]] = true;

			if (temp[0] + U <= F)
				queue.add(new int[] { temp[0] + U, temp[1] + 1 });
			if (temp[0] - D >= 1)
				queue.add(new int[] { temp[0] - D, temp[1] + 1 });
		}

		if (ans != -1)
			System.out.println(ans);
		else
			System.out.println("use the stairs");
	}
}
반응형

'Algorithm > 백준' 카테고리의 다른 글

13305번 : 주유소 [Java]  (0) 2021.04.12
1987번 : 알파벳 [Java]  (0) 2021.04.11
2251번 : 물통 [Java]  (0) 2021.04.09
3085번 : 사탕 게임 [Java]  (0) 2021.04.09
2583번 : 영역 구하기 [Java]  (0) 2021.04.09