반응형
https://www.acmicpc.net/problem/21317
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 1024 MB | 377 | 149 | 84 | 37.333% |
문제
심마니 영재는 산삼을 찾아다닌다.
산삼을 찾던 영재는 N개의 돌이 일렬로 나열되어 있는 강가를 발견했고, 마지막 돌 틈 사이에 산삼이 있다는 사실을 알게 되었다.
마지막 돌 틈 사이에 있는 산삼을 캐기 위해 영재는 돌과 돌 사이를 점프하면서 이동하며 점프의 종류는 3가지가 있다.
점프의 종류에는 현재 위치에서 다음 돌로 이동하는 작은 점프, 1개의 돌을 건너뛰어 이동하는 큰 점프, 2개의 돌을 건너뛰어 이동하는 매우 큰 점프가 있다.
각 점프를 할 때는 에너지를 소비하는데, 이 때 작은 점프와 큰 점프시 소비되는 에너지는 점프를 하는 돌의 번호마다 다르다.
매우 큰 점프는 단 한 번의 기회가 주어지는데, 이때는 점프를 하는 돌의 번호와 상관없이 k만큼의 에너지를 소비한다.
에너지를 최대한 아껴야 하는 영재가 산삼을 얻기 위해 필요한 에너지의 최솟값을 구하여라.
영재는 첫 번째 돌에서부터 출발한다.
입력
첫 번째 줄에는 돌의 개수 N이 주어진다.
N - 1개의 줄에 걸쳐서, 1번 돌부터 N - 1번 돌 까지의 작은 점프를 하기 위해 필요한 에너지, 큰 점프를 하기 위해 필요한 에너지가 주어진다.
마지막 줄에는 K가 주어진다.
출력
산삼을 얻기 위해 필요한 영재의 최소 에너지를 출력한다.
제한
- 1 ≤ N ≤ 20
- 작은 점프, 큰 점프 시 필요한 에너지와 K는 5,000을 넘지않는 자연수이다.
예제 입력 1
5
1 2
2 3
4 5
6 7
4
예제 출력 1
5
코드
import java.io.*;
import java.util.*;
public class p21317 {
static int n, k;
static int[][] arr;
static int answer = 987654321;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
n = Integer.parseInt(br.readLine());
// 배열 크기는 넉넉하게 할당
arr = new int[n][n];
for (int i = 1; i < n; i++) {
st = new StringTokenizer(br.readLine());
arr[i][0] = Integer.parseInt(st.nextToken());
arr[i][1] = Integer.parseInt(st.nextToken());
}
k = Integer.parseInt(br.readLine());
go(0, 1, false);
System.out.println(answer);
}
static void go(int sum, int to, boolean useMax) {
// n 번째 돌에 오면 최소값 체크 후 종료
if (to == n) {
answer = Math.min(answer, sum);
return;
}
// n 번째 돌을 넘어가면 종료
if (to > n) return;
go(sum + arr[to][0], to + 1, useMax); // 1칸
go(sum + arr[to][1], to + 2, useMax); // 2칸
// 3단점프를 사용하지 않았을 때만 사용한다.
if (!useMax) {
go(sum + k, to + 3, true);
}
}
}
반응형
'알고리즘 > [ Baekjoon ]' 카테고리의 다른 글
[ BOJ ][JAVA][4097] 수익 (0) | 2021.05.19 |
---|---|
[ BOJ ][JAVA][21318] 피아노 체조 (0) | 2021.05.15 |
[ BOJ ][JAVA][21312] 홀짝 칵테일 (0) | 2021.05.15 |
[ BOJ ][JAVA][21278] 호석이 두 마리 치킨 (2) | 2021.05.15 |
[ BOJ ][JAVA][2252] 줄 세우기 (0) | 2021.05.15 |