평평하게 하기 문제는 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;
}
이상입니다~!
'Algorithm' 카테고리의 다른 글
Cousera_Python for everyone_Chapter 1. 수업 후기. (0) | 2016.07.22 |
---|---|
[C] 더블릿 6단계_Bubble Sort (0) | 2016.04.03 |
[C] 더블릿 4단계_ 최대수연결 문제 (0) | 2016.03.28 |
[C] 더블릿 4단계_ 소인수분해 문제 (0) | 2016.03.27 |