본문 바로가기
PS/BOJ

[자바] 백준 6318 - Box of Bricks (boj java)

by Nahwasa 2022. 5. 31.

문제 : 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);
    }
}

댓글