ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ DP ] 개미전사
    알고리즘/이코테 - 실전 2021. 8. 23. 22:26

    난이도 : 중  풀이시간 : 30분  시간제한 : 1초 

    [ DP ] 개미전사

    개미 전사는 부족한 식량을 충당하고자 메뚜기 마을의 식량창고를 몰래 공격하려 한다. 메뚜기 마을엔 여러 개의 식량창고가 있는데 식량창고는 일직선으로 이어져 있다. 각 식량창고에는 정해진 수의 식량을 저장하고 있으며 개미 전사는 식량창고를 선택적으로 약탈하여 식량을 빼앗을 예정이다. 이 때 메뚜기 정찰병들은 일직선상에 존재하는 식량창고 중에서 서로 인접한 식랴창고가 공격받으면 바로 알아챌 수 있다. 따라서 개미 전사가 정찰병에게 들키지 않고 식량창고를 약탈하기 위해서는 최소한 한 칸 이상 떨어진 식량창고를 약탈해야 한다. 개미 전사를 위해 식량 창고 N개에 대한 정보가 주어질 때 얻을 수 있는 식량의 최댓값을 구하여라

     

    :: 입력 조건

     

    • 첫째 줄에 식량창고의 개수 N이 주어진다.(3 <= N <= 100)
    • 둘째 줄에 공백으로 구분되어 각 식량창고에 저장된 식량의 개수 K가 주어진다.(0 <= K <= 1,000)

     

    :: 출력 조건

     

    • 첫째 줄에 개미 전사가 얻을 수 있는 식량의 최댓값을 출력하시오

     


     

      내   코드   

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <string>
    
    using namespace std;
    
    #define endl "\n"
    
    int k[101];
    int dp[101];
    
    int x;
    
    int main() {
    	cin >> x;
    	
    	for (int i = 0; i < x; i++) {
    		cin >> k[i];
    	}
    
    	for (int i = 0; i < x; i++) {
    
    		if (i == 0 || i == 1) {
    			dp[i] = k[i]; 
    		}
    		else if (i == 2) {
    			dp[i] = k[i] + k[0];
    		}
    		else {
    			dp[i] = max(dp[i - 2], dp[i - 3]) + k[i];
    		}
    	}
    
    	cout << dp[x - 1] << endl;
    
    }

     

      정답  코드  

    #include <bits/stdc++.h>
    
    using namespace std;
    
    // 앞서 계산된 결과를 저장하기 위한 DP 테이블 초기화
    int d[100];
    int n;
    vector<int> arr;
    
    int main(void) {
        // 정수 N을 입력받기
        cin >> n;
        // 모든 식량 정보 입력받기
        for (int i = 0; i < n; i++) {
            int x;
            cin >> x;
            arr.push_back(x);
        }
    
        // 다이나믹 프로그래밍(Dynamic Programming) 진행(보텀업)
        d[0] = arr[0];
        d[1] = max(arr[0], arr[1]);
        for (int i = 2; i < n; i++) {
            d[i] = max(d[i - 1], d[i - 2] + arr[i]);
        }
    
        // 계산된 결과 출력
        cout << d[n - 1] << '\n';
    }

     

      리뷰  

    정답코드랑 묘하게 다른데 

    결과는 잘 나옴

     

    체크하는 칸은 다르지만 결론적으로 최댓값을 구하는 코드임

    '알고리즘 > 이코테 - 실전' 카테고리의 다른 글

    [ DP ] 효율적인 화폐 구성  (0) 2021.09.08
    [ DP ] 바닥 공사  (0) 2021.08.23
    [ DP ] 1로 만들기  (0) 2021.08.23
    [ 이진탐색 ] 떡볶이 떡 만들기  (0) 2021.08.10
    [ 이진탐색 ] 부품 찾기  (0) 2021.08.10
준생e