새로온 알바생이 별독의 높이를 맞추지 않고 벽을 쌓았다.
관리자를 위해 몇 개의 벽돌을 옮겨야 벽돌의 높이가 같아질 수 있는지 구해주는 프로그램을 제작하시오.
입력값
[5, 2, 4, 1, 7, 5], [12, 8, 10, 11, 9, 5, 8], [27, 14, 19, 11, 26, 25, 23, 15],
function answer(blocks) {
let result = 0;
// 1. 인덱스별 평균 높이 구하기
let avg = 0;
for (let i = 0; i < blocks.length; i++) {
avg += blocks[i]
}
avg /= blocks.length
// 2. 각 인덱스 별로 평균 숫자와 비교해서 얼만큼 움직여야하는지 계산
for (let i = 0; i < blocks.length; i++) {
if (avg < blocks[i]) {
result += blocks[i] - avg
}
}
return result;
}
- 전에 푼 체스와 비슷한 유형의 문제이다.
하지만 체스에서는 정해진 값이 있었다면, 여기서는 평균을 구해 계산하는 부분이 다르다.- for문을 이용하여 각 인덱스 값을 전부 avg에 넣어준 뒤, avg 나누기 blocks의 길이만큼 나누어 평균을 구해준다.
- 각 인덱스가 평균 숫자가 되기 위해 움직여야 하는 수를 구해준다.
만약 avg보다 blocks[i]가 클 경우 blocks[i] - avg를 result에 넣어준다.- 순회하며 움직임이 필요한 수를 result에 더해주어 총 움직여야하는 수를 출력한다.
즉, 평균을 초과한 값을 더해 result에 넣어주는 식이다.