(1208)(Flatten) - s/w 문제 해결 기본 1일차 -flatten

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

0%