today_is

[ 알고리즘 ] 진정한 효도 (Lv. 2, java) 본문

카테고리 없음

[ 알고리즘 ] 진정한 효도 (Lv. 2, java)

ye_rang 2024. 6. 24. 17:08

https://softeer.ai/practice/7374

 

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

 

softeer.ai

 

코드

import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int arr[][] = new int[3][3];

        int cost = 1000;
        
        for(int i=0; i< 3; i++) {
            for(int j=0; j < 3; j++) {
                int num = sc.nextInt();
                arr[i][j] = num;
            }
        }

        for(int i=0; i<3; i++) {
            for(int j=1; j<=3; j++) {
                int current = Math.abs(arr[i][0] - j) + Math.abs(arr[i][1] - j) + Math.abs(arr[i][2] - j);
                cost = Math.min(cost, current);
            }
        }

        for(int i=0; i<3; i++) {
            for(int j=1; j<=3; j++) {
                int current = Math.abs(arr[0][i] - j) + Math.abs(arr[1][i] - j) + Math.abs(arr[2][i] - j);
                cost = Math.min(cost, current);
            }
        }
        System.out.print(cost);
    }
}

 

 

 

한 줄씩 해석

 

Scanner 객체를 생성한다

 

int로 2차원 배열을 3 * 3으로 생성

 

우선, cost는 터무니 없이 큰 값으로 초기화 시켜준다 (나중에 cost와 비교하면서 더 작은 값을 cost에 계속 담을 것임)

 

for문으로 i 는 0 ~ 2 {

       for문으로 j 는 0 ~ 2 {

            num 변수에 입력 받은 int 값을 하나씩 받아온다

            arr[i][j] 에 num을 하나씩 대입하여, 2차원 배열을 완성(3 * 3)

       }

}

 

[ 가로 계산 ]    j는 땅의 높이이다. 모든 행에 대해서 땅의 높이가 1, 2, 3로 맞춰보고 가장 차이가 적은 값을 출력하도록 작성한다

for문으로 i 는 0 ~ 2 {

      for문으로 j 는 1 ~ 3 {

            current 변수에는 "같은 행일때"   j 값과의 차이를 구한다 (이 때, 절대값으로 차이를 구해야한다. 값의 차이는 양수로 표현)

            cost는 cost와 current 를 비교하여 더 작은 값을 담는다. 

      }

}

 

[ 세로 계산 ]    j는 땅의 높이이다. 모든 행에 대해서 땅의 높이가 1, 2, 3로 맞춰보고 가장 차이가 적은 값을 출력하도록 작성한다

for문으로 i 는 0 ~ 2 {

      for문으로 j 는 1 ~ 3 {

            current 변수에는 "같은 열일때"   j 값과의 차이를 구한다 (이 때, 절대값으로 차이를 구해야한다. 값의 차이는 양수로 표현)

            cost는 cost와 current 를 비교하여 더 작은 값을 담는다. 

      }

}

 

cost를 출력

 


 

어려웠던 부분

 

처음에는 같은 행 or 열 일때, 각 값들이 같은지를 비교하고자 하였다.

 

그러나, 결국 문제에서의 핵심은 땅의 높이를 동일하게 맞추기 위한 최소 비용을 찾는 것이기 때문에

 

땅의 높이와 각 값들의 차이를 구해서 비용을 산출하는 방법을 택했다.

 

아오 너무 어렵다