ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BOJ) 에너지 모으기
    알고리즘/백준 2020. 7. 2. 16:16
    반응형

    에너지 모으기

     

    16198번: 에너지 모으기

    N개의 에너지 구슬이 일렬로 놓여져 있고, 에너지 구슬을 이용해서 에너지를 모으려고 한다. i번째 에너지 구슬의 무게는 Wi이고, 에너지를 모으는 방법은 다음과 같으며, 반복해서 사용할 수 있�

    www.acmicpc.net

    풀이

     

    브루트 포스 문제로 모든 경우의 수를 다 구해야 했다.

    BFS와 DFS 중 DFS가 더 적절하다고 생각해서 DFS로 문제를 풀었다.

    문제 조건에 따라서, 1~n-1 까지 하나의 숫자를 골라 좌 우에 있는 에너지를 곱해서 더해나갔다.

    이때, 에너지를 담을 변수는 ArrayList를 선택해서 따로 index값을 복잡하게 조정하지 않게 해주었다.

    왜냐하면, ArrayList에는 특정 index에 값(Element)를 넣을 수 있는 메소드가 존재하기 때문이다.

    배열로 이를 구현하려면 귀찮아지니까 ArrayList를 썼다.

     

    아무튼, 인덱스를 정해서 에너지를 구해서 더해준 다음 해당 인덱스를 제거하고 dfs를 돌리고, 다시 인덱스를 넣어주면서

    최종적으로 2개가 남았을 때, 더한 에너지 값 중 최대값을 최신화했다.

    크게 어려운 문제는 아니었다고 생각한다.

     

    코드

     

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.StringTokenizer;
    
    public class GatherEnergy_16198 {
        static int answer;
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
            StringTokenizer st = new StringTokenizer(br.readLine());
            int n = Integer.parseInt(st.nextToken());
            ArrayList<Integer> energyList = new ArrayList<>();
            st = new StringTokenizer(br.readLine());
            for(int i=0; i<n; i++) {
                energyList.add(Integer.parseInt(st.nextToken()));
            }
    
            solution(n,energyList);
    
            br.close();
        }
    
        private static void solution(int n, ArrayList<Integer> energyList) {
            answer =0;
            dfs(n,energyList, 0);
            System.out.println(answer);
        }
    
        private static void dfs(int n, ArrayList<Integer> energyList, int sum) {
            if(n ==2) {
                answer = Math.max(answer,sum);
                return;
            }
    
            for(int i=1; i<energyList.size()-1; i++) {
                int mul = energyList.get(i-1)*energyList.get(i+1);
                int energy = energyList.get(i);
                energyList.remove(i);
                dfs(n-1, energyList, sum+mul);
                energyList.add(i,energy);
            }
        }
    }
    반응형

    '알고리즘 > 백준' 카테고리의 다른 글

    BOJ) 부등호  (0) 2020.07.03
    BOJ) 스타트와 링크  (2) 2020.07.02
    BOJ) 연구소  (0) 2020.07.02
    BOJ) NM과 K (1)  (0) 2020.07.02
    BOJ) 계란으로 계란치기  (0) 2020.06.30

    댓글

Designed by Tistory.