티스토리 뷰
1. 문제
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
2. 풀이
BFS로 풀이했다
(1) n층을 최소한의 버튼을 눌러 도착했을 때의 버튼 누른 횟수를 저장하는 배열(minBtn)을 사용해 정답을 구하고, 중복을 체크하는데 사용한다.
(2) 위의 최소 버튼 누른 횟수를 저장하는 배열(minBtn)에서 시작점의 버튼 누른 횟수를 0이 아닌 1로 처리해, 시작점과 처음 도착한 층의 차이점을 만들어 처리한다.
(3) 맨 마지막 정답을 처리할때, +1 한 값을 빼준다.
3. 코드
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.io.*;
public class Main {
// bfs를 사용해 버튼 누르는 횟수를 계산
public static String getCnt(int F, int S, int G, int U, int D){
Queue<Integer> q = new LinkedList<Integer>();
int[] minBtn = new int[F+1]; // n층에 도착하기 위해 눌러야할 버튼의 최소 횟수
Arrays.fill(minBtn, 0); // 도착하지 않음 처리
q.add(S);
minBtn[S] = 1; // 첫번째 층 중복 방문 막기 위해
while(!q.isEmpty()){
int now = q.poll();
// 도착
if(now == G) {
return String.valueOf(minBtn[now] - 1); // 처음에 더한 1 값 빼줌
}
if(now + U <= F && minBtn[now + U] == 0) {
minBtn[now + U] = minBtn[now] + 1;
q.add(now + U);
}
if(now - D >= 1 && minBtn[now - D] == 0) {
minBtn[now - D] = minBtn[now] + 1;
q.add(now - D);
}
}
return "use the stairs";
}
public static void main (String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input = br.readLine().split(" ");
int F = Integer.parseInt(input[0]);
int S = Integer.parseInt(input[1]);
int G = Integer.parseInt(input[2]);
int U = Integer.parseInt(input[3]);
int D = Integer.parseInt(input[4]);
System.out.println(getCnt(F, S, G, U, D));
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[JAVA/DP] 백준 14501 퇴사 (0) | 2021.10.18 |
---|---|
[JAVA/스택] 백준 2493 탑 (0) | 2021.10.11 |
[JAVA/BFS] 백준 2644 촌수계산 (0) | 2021.10.11 |
[JAVA/다익스트라] 백준 5719 거의 최단 경로 (0) | 2021.07.15 |
[JAVA/LCA] 백준 3176 도로 네트워크 (0) | 2021.07.15 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 집배원 한상덕
- 아두이노
- 구슬 탈출2
- 워드프레스
- 키 순서
- 11503
- hackerrank
- dht11
- 라즈베리파이
- the pads
- c++
- java
- BFS
- hc-06
- FTP
- 자바
- 라즈비안
- 합승 택시 요금
- mysql
- 2981
- 스티커모으기2
- 블루투스
- dovecot
- 프로그래머스
- 백준
- DP
- 리눅스
- ESP8266
- git
- 메일서버
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함