728x90
오답 노트 & 새로 알게 된 점
문제를 읽으면서 숨바꼭질 문제와 비슷한 느낌을 받았다.
bfs를 이용하여 N에 도달할 때 에너지 최솟값을 구해주면 된다.
다만 풀면서 실수한 점이 작은 점프, 큰 점프, 매우 큰 점프를 하면서
n의 값 또한 더 증가된다.
코드
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
import java.io.*;
import java.util.*;
public class Main {
static int atoi(String str) {
return Integer.parseInt(str);
}
static int N, k, ans = Integer.MAX_VALUE;
static int jump[][];
static class Stone{
int n, sum;
boolean flag;
public Stone(int n, int sum, boolean flag) {
this.n = n;
this.sum = sum;
this.flag = flag;
}
}
public static void main(String[] args) throws IOException {
input();
}
static void input() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = atoi(st.nextToken());
jump = new int[N + 1][2];
for(int i = 1; i<N; i++) {
st = new StringTokenizer(br.readLine());
int small = atoi(st.nextToken());
int big = atoi(st.nextToken());
jump[i][0] = small;
jump[i][1] = big;
}
k = atoi(br.readLine());
bfs();
}
static void bfs() {
Queue<Stone> q = new ArrayDeque<>();
q.offer(new Stone(1, 0, false));
while (!q.isEmpty()) {
Stone s = q.poll();
if(s.n > N) continue;
if(s.n == N){
ans = Math.min(ans, s.sum);
continue;
}
q.offer(new Stone(s.n + 2, s.sum + jump[s.n][1], s.flag));
q.offer(new Stone(s.n + 1, s.sum + jump[s.n][0], s.flag));
if(s.flag == false) {
q.offer(new Stone(s.n + 3, s.sum + k, true));
}
}
System.out.println(ans);
}
}
|
cs |
728x90
'BOJ(Java)' 카테고리의 다른 글
자바(백준) 15970 화살표 그리기 (0) | 2021.10.17 |
---|---|
자바(백준) 11652 카드 (0) | 2021.10.17 |
자바(백준) 1759 암호 만들기 (0) | 2021.10.14 |
자바(백준) 14888 연산자 끼워넣기 (0) | 2021.10.13 |
자바(백준) 11000 강의실 배정 (0) | 2021.10.12 |