반응형
https://www.acmicpc.net/problem/21317
package com.ji.beakjoon.dfs;
import java.util.Scanner;
/**
* 징검다리 건너기
*
* @author ji
*
*/
public class CrossingBridgeDfs {
static int[][] arr;
static int stoneCount;
static boolean done = true;
static int min = Integer.MAX_VALUE;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
stoneCount = input.nextInt();
arr = new int[stoneCount - 1][2];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < 2; j++) {
arr[i][j] = input.nextInt();
}
}
int k = input.nextInt();
int sum = 0;
dfs(1, k, done, sum);
System.out.println(min);
}
public static void dfs(int personPosition, int k, boolean done, int sum) {
if (personPosition == stoneCount) {//영재의 위치가 돌의 위치에 일치할 경우만
min = Math.min(min, sum);
return;
} else if (personPosition < stoneCount) {//영재의 위치가 아직 돌을 못넘었을경우
// 매우 큰 점프
if (done == true) {//매우 큰점프는 한번만 동작
sum += k;
done = false;
dfs(personPosition + 3, k, done, sum);
sum -= k;
done = true;
}
// 작은 점프 값으로 sum증가 후 재귀
sum += arr[personPosition - 1][0];
dfs(personPosition + 1, k, done, sum);
sum -= arr[personPosition - 1][0];
// 큰 점프 값으로 sum 증가 후 재귀
sum += arr[personPosition - 1][1];
dfs(personPosition + 2, k, done, sum);
sum -= arr[personPosition - 1][1];
}
}
}
728x90
'[개발관련] > 코테준비' 카테고리의 다른 글
[백준] 아기상어 (0) | 2021.07.18 |
---|---|
[백준] 출석체크 (0) | 2021.07.11 |
[백준] 공주님을 구해라! (0) | 2021.07.11 |
[백준] 포도주 시식 (0) | 2021.07.11 |
[백준] 단지번호붙이기 (0) | 2021.07.11 |