알고리즘/SWExpert알고리즘

[SWEA] 1208번 Flatten 문제

Fenderblue 2023. 5. 20. 02:44

나름 시간을 줄여서 풀고자 노력했다

 

package D3;

import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;

public class SW_1208 {  //Flatten 문제
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        int dump;   //최대덤프횟수
        for (int t = 1; t <= 10; t++) {
            dump = Integer.parseInt(br.readLine());
            st = new StringTokenizer(br.readLine());
            int[] boxes = new int[100]; //각 박스들의 높이별로 저장할 배열
            for (int i = 0; i < 100; i++) {
                boxes[i] = Integer.parseInt(st.nextToken());
            }
            Arrays.sort(boxes);
            int max = 99; int min = 0; int tmp = 0;
            while (boxes[99] - boxes[0] == 1 || dump != 0) {    //가장 높은곳과 가장 낮은곳 차가 1일경우 또는 dump를 다한경우까지
                boxes[99]--;
                boxes[0]++;
                dump--;
                while (boxes[max] < boxes[max-1]) {     //값을 부분정렬해준다
                    tmp = boxes[max];
                    boxes[max] = boxes[max - 1];
                    boxes[max - 1] = tmp;
                    max--;
                }
                max = 99;
                while (boxes[min] > boxes[min+1]) {     //값을 부분정렬해준다
                    tmp = boxes[min];
                    boxes[min] = boxes[min + 1];
                    boxes[min + 1] = tmp;
                    min++;
                }
                min = 0;
            }
            bw.write("#" + t + " " + (boxes[99] - boxes[0]));
            bw.newLine();
        }
        bw.flush();
        bw.close();
    }
}