본문 바로가기

Development/CodingTest

[Greedy] Softeer(소프티어) level 2 진정한 효도 Java 풀이

https://softeer.ai/practice/7374

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

문제풀이법

  1. 한 줄의 땅 높이들을 저장하는 ArrayList 생성
  2. 땅의 모든 높이 값들을 배열에 저장하면서, 동시에 가로열의 높이를 비교
  3. 비교 방법은 오름차순 정렬 후 가장 큰 값이 가장 작은 값(첫 번째 인덱스)과 같으면 0을 출력
    아니면 가장 큰 값에서 첫 번째 인덱스와의 차이, 그리고 가장 큰 값과 두 번째 인덱스와의 차이 값이 땅을 고르게 만드는 비용이 됨
  4. 이전에 필요한 비용과 비교 후 더 작은 값으로 대체, ArrayList 초기화
  5. 가로열 비교 후 세로열도 순회하면서 비교

코드

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);   
    }
}