today_is
[ 알고리즘 ] 진정한 효도 (Lv. 2, java) 본문
https://softeer.ai/practice/7374
코드
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 열 일때, 각 값들이 같은지를 비교하고자 하였다.
그러나, 결국 문제에서의 핵심은 땅의 높이를 동일하게 맞추기 위한 최소 비용을 찾는 것이기 때문에
땅의 높이와 각 값들의 차이를 구해서 비용을 산출하는 방법을 택했다.
아오 너무 어렵다