728x90
문제

메모리 제약

입/출력


문제 분석
단순 구현 문제로 흐름을 따라서 계산하면 될 것 같다.
가로로 돌면서 높이 비교
세로로 돌면서 높이 비교
만약 중간에 0이 나오면 더 작은 수가 없기때문에 중지
풀이 1
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
BufferedReader bf = new BufferedReader(inputStreamReader);
// 땅 정보 입력
int[] ground1 = Arrays.stream(bf.readLine().split(" ")).mapToInt(Integer::new).toArray();
int[] ground2 = Arrays.stream(bf.readLine().split(" ")).mapToInt(Integer::new).toArray();
int[] ground3 = Arrays.stream(bf.readLine().split(" ")).mapToInt(Integer::new).toArray();
// 3 * 3 전체 땅 생성
int[][] groundInfo = {ground1, ground2, ground3};
int answer = 9;
for (int row = 0; row < groundInfo.length; row++) {
answer = Math.min(Calculate(groundInfo[row]), answer);
answer = Math.min(Calculate(groundInfo[row]), answer);
if (answer == 0) {break;}
}
for (int col = 0; col < groundInfo.length; col++) {
// 세로 연산
int[] makeCol = {groundInfo[0][col], groundInfo[1][col],groundInfo[2][col]};
answer = Math.min(Calculate(makeCol), answer);
if (answer == 0) {break;}
}
System.out.println(answer);
}
public static int Calculate(int[] row) {
int result = 0;
int avgVal = Arrays.stream(row).sum()/3;
// 평균과 값과의 차이 계산
for (int i = 0; i < row.length; i++) {
result += Math.abs(avgVal-row[i]);
}
return result;
}
}
실패
세개의 값 중 몇개가 같은지를 잘못 비교하고 있었다...
해당 로직을 다시 수정해서 제출
풀이 2
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
BufferedReader bf = new BufferedReader(inputStreamReader);
// 땅 정보 입력
int[] ground1 = Arrays.stream(bf.readLine().split(" ")).mapToInt(Integer::new).toArray();
int[] ground2 = Arrays.stream(bf.readLine().split(" ")).mapToInt(Integer::new).toArray();
int[] ground3 = Arrays.stream(bf.readLine().split(" ")).mapToInt(Integer::new).toArray();
// 3 * 3 전체 땅 생성
int[][] groundInfo = {ground1, ground2, ground3};
int answer = 9;
for (int row = 0; row < groundInfo.length; row++) {
answer = Math.min(Calculate(groundInfo[row]), answer);
answer = Math.min(Calculate(groundInfo[row]), answer);
if (answer == 0) {break;}
}
for (int col = 0; col < groundInfo.length; col++) {
// 세로 연산
int[] makeCol = {groundInfo[0][col], groundInfo[1][col],groundInfo[2][col]};
answer = Math.min(Calculate(makeCol), answer);
if (answer == 0) {break;}
}
System.out.println(answer);
}
public static int Calculate(int[] row) {
int result = 0;
// 같은 값 확인
int[] delDupRow = Arrays.stream(row).distinct().toArray();
int rowCount = delDupRow.length;
switch (rowCount) {
case 1: // 전부 다 같을때
result = 0;
break;
case 2: // 두개만 같을때
result = Math.abs(delDupRow[0]-delDupRow[1]);
break;
case 3: // 세개 다 다른경우(1,2,3)
result = 2;
}
return result;
}
}
성공

링크
https://softeer.ai/practice/7374/history?questionType=ALGORITHM
Softeer - 현대자동차그룹 SW인재확보플랫폼
softeer.ai
728x90
반응형
LIST
'Etc > 알고리즘' 카테고리의 다른 글
| [softeer] 6283 (0) | 2024.07.19 |
|---|---|
| [softeer] 6288 (0) | 2024.07.19 |
| [softeer] 6284 (1) | 2024.07.18 |
| [softeer] 7703 (0) | 2024.07.11 |
| [softeer] 7628 (0) | 2024.07.11 |