알고리즘/자바(Java)
[백준/boj] 16198: 에너지 모으기 (Java) / DFS / 재귀 / 백트래킹 / 브루트포스
s5he2
2021. 6. 23. 21:05
반응형
문제
16198번: 에너지 모으기
N개의 에너지 구슬이 일렬로 놓여져 있고, 에너지 구슬을 이용해서 에너지를 모으려고 한다. i번째 에너지 구슬의 무게는 Wi이고, 에너지를 모으는 방법은 다음과 같으며, 반복해서 사용할 수 있
www.acmicpc.net
풀이
import java.util.*;
import java.io.*;
public class Main {
static List<Integer> marbles = new ArrayList<Integer>();
static int power = 0;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0; i< N; i++)
marbles.add(Integer.parseInt(st.nextToken()));
dfs(N, marbles, 0);
System.out.println(power);
}
private static void dfs(int n, List<Integer> marbles, int sum) {
if(n == 2) { // 첫번째와 마지막 구슬만 남았을 때
power = Math.max(sum, power); // 최댓값 갱신
return;
}
for(int i=1; i< marbles.size() -1; i++) { // 첫번째와 마지막 구슬은 제외한다.
int s = marbles.get(i-1) * marbles.get(i+1); // 양쪽 구슬을 곱한 값
int temp = marbles.get(i); marbles.remove(i); // i 구슬을 배열에서 없애고
dfs(n-1, marbles, sum+s); // 재귀 호출 dfs(구슬 개수 -1, i구슬 제외된 배열, s를 더한 sum값)
marbles.add(i, temp); // i 구슬을 다시 제자리에 삽입한다.
}
}
}
반응형