평평하게 하기 문제는 5단계임에비해 쉬운 편이라 한번에 해결하였습니다. 다른 분들도 문제를 읽어보시면 쉽게 해결하실 수 있을 것이니 따로 자세히 적지는 않겠습니다.

 

---- 문제 -----

프로그램 명: box_brick

밥은 벽돌 쌓기놀이를 좋아한다.

"봐!! 내가 벽을 만들었어" 그는 누이 앨리스에게 이야기 했어. 그러자 누이는 "벽돌의 높이가 같아야지 제대로 된 벽이지"라고 되받았어.

밥이 곰곰 생각해보니 그녀의 말이 맞는 것 같아 높이를 같게 하기위해 벽돌을 하나하나 옮기기 시작했어.

밥은 게을러서 최소한의 벽돌을 옮겨서 같은 높이를 맞추기를 원해. 밥을 도와 줄수 있겠니?

입력

첫수는 벽돌 무더기의 수 n ( 1 <= n <= 50 ) 이고 , 다음 n 수는 각 무더기의 벽돌의 수(벽돌의 높이) hi 이다. 각 hi 는 1 에서 100 사이이다.

높이를 같이 맞출수 없는 데이터는 입력으로 주어지지 않는다.

출력

아래와 같은 형식으로 출력한다.

The minimum number of moves is k.

입출력 예

입력

6
5 2 4 1 7 5

출력

The minimum number of moves is 5.

보충 설명

출처:Southwestern European Regional Contest 1997

--- 해석 ---

이 문제는 즉 (블럭의 총 갯수 / 무더기의 개수)로 평균 갯수를 구하여 ( 평균보다 많은 블럭 갯수 - 평균 ) 를 출력하면 

되는 간단한 문제입니다.

 

 

--- 코드 ---

 

#include <stdio.h>
 
int main(){
        
        int a; //벽돌 무더기 수.
        int x[50], sum = 0, avg, sub = 0; //각 무더기의 갯수, 총 벽돌 수, 평균,   이동해야하는 벽돌 수.
        scanf("%d", &a);
 
        for (int i = 0; i < a; i++){
                 scanf("%d", &x[i]);                       //각 무더기의 갯수 입력.  scanf("%d", x + i)이렇게 써도 됨.
                 sum += x[i];                              // 총 벽돌 갯수
        }
        avg = sum / a;           
 
        for (int i = 0; i < a; i++){

                 if (x[i] - avg > 0) sub += (x[i] - avg);  //양수인 것만 더해줌 == 이동해야하는 벽돌

        }
 
        printf("The minimum number of moves is %d.", sub);
 
        return 0;
}

이상입니다~!

 

 

+ Recent posts