[SWEA] #1208 Flatten


Link


https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV139KOaABgCFAYh&categoryId=AV139KOaABgCFAYh&categoryType=CODE

Code

import java.util.Scanner;

class Solution {
    public static void main(String args[]) throws Exception {
        Scanner sc = new Scanner(System.in);
        for (int testCase = 1; testCase <= 10; testCase++) {
            int num = sc.nextInt();
            int[] height = new int[100];
            int min = 101;
            int max = -1;
            for (int i = 0; i < 100; i++) {
                int temp = sc.nextInt();
                height[temp - 1]++;
                if (temp < min) {
                    min = temp;
                }
                if (max < temp) {
                    max = temp;
                }
            }
            for (int i = 0; i < num; i++) {
                height[max - 1]--;
                height[max - 2]++;
                if (height[max - 1] <= 0) {
                    max--;
                }
                height[min - 1]--;
                height[min]++;
                if (height[min - 1] <= 0) {
                    min++;
                }
            }
            System.out.printf("#%d %d\n", testCase, max - min);
        }
    }
}

Solution


タイル高さの値は、高さ인덱스あたりの箱の山数です.
num回数주어진 덤프 횟수、ドアを回転させながら以下の手順を繰り返す
heightのmax-1を減算してmax-2に加算
ex)高さ7の箱の中で平坦化すると、高さ6の箱の山となる
max-1の値が0未満の場合、높이 max인 상자더미가 없으면 maxの値が減少します.
heightのmin-1値を減算し、minに加算
ex)高さ0の箱で平坦化すると、高さ1の箱の山となる.
min-1値が0未満の場合は높이 min인 상자더미가 없으면 min増加
最終出力最大最小値