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);
}
}
}
배열 height의 값은 각 높이 인덱스
만큼 쌓인 상자 더미 개수
num횟수 주어진 덤프 횟수
만큼 for문을 돌리면서 아래의 과정을 반복
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값 증가
마지막에 max - min값 출력