문제 : boj6318
입력으로 들어온 n개의 hi의 합이 n으로 나누어 떨어진다고 했으므로, 잘 생각해보면 결국 모두 동일한 높이인 sum(hi)/n 으로 맞춰줘야 한다. 즉, sum(hi)/n 보다 큰 hi들에서 하나씩 빼서 sum(hi)/n 미만의 hi들에 더해줘야 한다. 이 말은 다시 말해, n개의 hi들에 대해 이하의 값을 구하면 된다. 여기서 hi_k는 k번째 hi 값을 의미하고, sum(hi)/n은 n개의 hi값의 합을 n으로 나눈 값이다(나누어 떨어진다는 조건이 있으므로 정수).
말로 설명하면, sum(hi)/n보다 큰 hi값을 초과한 값 부분만 다 더해주면 답이 된다.
코드 : github
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int set = 1;
while (true) {
int n = Integer.parseInt(br.readLine());
if (n == 0) break;
StringTokenizer st = new StringTokenizer(br.readLine());
int[] arr = new int[n];
int sum = 0;
for (int i = 0; i < n; i++) {
int cur = Integer.parseInt(st.nextToken());
sum += cur;
arr[i] = cur;
}
int cnt = 0;
sum/=n;
for (int i = 0; i < n; i++) {
if (arr[i] > sum) cnt+=arr[i]-sum;
}
sb.append(String.format("Set #%d\nThe minimum number of moves is %d.\n\n", set++, cnt));
}
System.out.print(sb);
}
}
'PS > BOJ' 카테고리의 다른 글
[자바, 파이썬] 백준 13706 - 제곱근 (boj java) (0) | 2022.06.01 |
---|---|
[자바] 백준 21941 - 문자열 제거 (boj java) (0) | 2022.05.31 |
[자바] 백준 9715 - 면적 구하기 (boj java) (0) | 2022.05.31 |
[자바] 백준 15881 - Pen Pineapple Apple Pen (boj java) (2) | 2022.05.30 |
[자바] 백준 1867 - 돌멩이 제거 (boj java) (0) | 2022.05.30 |
댓글