문제풀이법
- 한 줄의 땅 높이들을 저장하는 ArrayList 생성
- 땅의 모든 높이 값들을 배열에 저장하면서, 동시에 가로열의 높이를 비교
- 비교 방법은 오름차순 정렬 후 가장 큰 값이 가장 작은 값(첫 번째 인덱스)과 같으면 0을 출력
아니면 가장 큰 값에서 첫 번째 인덱스와의 차이, 그리고 가장 큰 값과 두 번째 인덱스와의 차이 값이 땅을 고르게 만드는 비용이 됨
- 이전에 필요한 비용과 비교 후 더 작은 값으로 대체, ArrayList 초기화
- 가로열 비교 후 세로열도 순회하면서 비교
코드
import java.io.*;
import java.util.*;
public class Main {
public static final List<Integer> row = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int[][] ground = new int[3][3];
int currentCost;
int answer = 4;
for (int i = 0; i < 3; i++) {
st = new StringTokenizer(in.readLine());
for (int j = 0; j < 3; j++) {
int height = Integer.parseInt(st.nextToken());
ground[i][j] = height;
row.add(height);
}
Collections.sort(row);
currentCost = 0;
if (row.get(0) == row.get(2)) {
System.out.println(0);
return;
} else {
currentCost = (row.get(2) - row.get(0)) + (row.get(2) - row.get(1));
}
if (currentCost < answer) {
answer = currentCost;
}
row.clear();
}
for (int i = 0; i < 3; i++) {
currentCost = 0;
for (int j = 0; j < 3; j++) {
row.add(ground[j][i]);
}
Collections.sort(row);
if (row.get(0) == row.get(2)) {
System.out.println(0);
return;
} else {
currentCost = (row.get(2) - row.get(0)) + (row.get(2) - row.get(1));
}
if (currentCost < answer) {
answer = currentCost;
}
row.clear();
}
System.out.println(answer);
}
}