9차시 1일차 - Faltten
평탄화 작업 수행하기
가로 길이는 항상 100으로 주어진다.
모든 위치에서 상자의 높이는 1이상 100이하로 주어짐
덤프 횟수는 1이상 100이하로 주어짐
주어진 덤프 횟수 이내에 평탄화가 완료되면 더 이상 덤프를 수행할 수 없으므로 그 때의 최고점과 최저점의 높이 차를 반환한다.
총 10개의 테스트 케이스가 주어지며, 각 테스트 케이스의 첫 번째 줄에는 덤프 횟수어 주어진다. 그리고 다음 줄에 각 상자의 높이값이 주어진다.
생각한 방법
매번 정렬해서 가장 큰 것부터 순서대로 가장 왼쪽 값에 더해주면 되지 않을까?
=>배열 복사를 해줘야해 - for문으로 해주던가, 아니면 arraycopy를 하던가.
=> arrays.sort를 내림차순으로 해야한다면 ` Arrays.sort(data, Collections.reverseOrder()); 이런 식으로 가능하다. (왜 안되지 ..)
=> 간단히 테스트 케이스 뽑아볼 때, Arrays.toString(); 으로 찍어보면 편하다. `
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
final int HSize = 100;
int ten = 1;
while(ten<11) {
int dumpT = stdIn.nextInt();
// 가로길이는 항상 100
int []arr = new int[HSize];
int []temp = new int[HSize];
for(int i = 0; i < HSize; i++)
arr[i] = stdIn.nextInt();
for(int j = 0 ; j < HSize; j++) {
temp[j] = arr[j];
}
Arrays.sort(temp);
for(int i = 0; i <dumpT; i++) {
temp[HSize-1]--;
temp[0]++;
Arrays.sort(temp);
}
int result = temp[HSize-1]-temp[0];
System.out.println("#"+ten+" "+result);
ten++;
}
}
}
참고자료
소프트웨어 아카데미 S/W Problem Solving
배열 정렬 참고자료
https://defacto-standard.tistory.com/18