Problem Solving/BOJ

[백준 4344번] [동적 계획법] 평균은 넘겠지

  • -
728x90
반응형

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

int main(void){
    
    // test case num calculate
    
    int test_case_num;
    cin >> test_case_num;

    // Percent store

    double percent_save[test_case_num];

    // Calculate each line

    for(int i = 0; i < test_case_num; i++){
        
        int check_case_num;
        cin >> check_case_num; // how many number in the line

        int check_sum = 0;
        int check_save[1000] = {0};// value save

        for (int j = 0; j <check_case_num; j++){
            int check_value;
            cin >> check_value;
            check_save[j] = check_value; //save it
            check_sum += check_value; // sum
        }

        int data_above_mean = 0; //define mean value 
        double check_mean = (double) check_sum / check_case_num;
        
        for (int j = 0; j < check_case_num; j++){
            if (check_save[j] > check_mean){
                data_above_mean += 1;
            }
        }
        double data_percent = ((double) data_above_mean / check_case_num) * 100 ;
        percent_save[i] = data_percent; // percent save
        

    }
    
    // print percent values

    for(int i = 0; i < test_case_num; i++){
        cout << fixed;
        cout.precision(3);
        cout << percent_save[i];
        cout << "%\n";
    }

    return 0;

}

 

그다지 어려운 문제는 아니나 동적할당이 필요한 이유에 대해서 느낄 수 있는 중요한 문제이다.

 

26번째 줄에서 check_save 배열을 선언해서 최종적으로 평균값을 넘는지를 비교하는 것이 목표인데

python 같은 경우는 미리 배열의 크기를 결정짓는 방식이 아니고 추가적으로 append시킬 수 있는것과 달리 cpp에서는 미리 구획을 해놓아야 한다. 즉 안쪽 이중 for문이 끝났다고 하여 check_save가 없어지는 것이 아니므로 그 과정에서 배열의 크기를 변동시키지 못한다.

(즉, 26번째 줄에서 check_save[check_case_num] 이런식으로 배정을 못한다는 것이다.)

 

따라서 check_save[check_case_num] 방식으로 처리하려면 전역변수나 지역변수로는 처리할 수 없다는 것을 인지할 수 있다. 따라서 동적할당 방식으로 배열을 지정해주어야 한다.

 

다만, 위의 문제에서는 배열의 내용이 중요한 것이 아니고 그때 그때마다 저장하고 비교만 하면 되는 것이므로 문제에서 제시한 수의 최댓값인 1000을 기준으로 배열을 미리 잡아놓으면 문제가 발생하지 않으므로 그렇게 진행하였다.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.