2차원 배열에 대해 알아가기 좋은 쉬운 문제였다!
먼저 나의 구현 로직은 이렇다.
2차원 배열로 값을 적재함.
적재하면서 매 Math.max()를 이용 -> 실제 로직 구현해보니 해당 행렬 반환이 어려워 if문으로 개별 비교 후 적재
먼저 처음 생각한 로직은 Math.max를 이용하는 것이였다. 그런데 막상 구현해보니 해당 함수를 쓴다면 최댓값 행렬 로직을 짜야될지 생각이 나지 않았다. 그래서 간단하게 if문으로 개별 비교한 다음 적재하는 거로 구현했다!
또한 2차원 배열 구조상 이중 for문을 사용하지만, 입력의 수가 매우 적다는 점에서 시간제한과 메모리 제한은 상관 없다고 판단했다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[][] arr = new int[9][9];
int max = 0;
int row = 0;
int col = 0;
for (int i = 0; i < 9; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < 9; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
if (arr[i][j] > max) {
max = arr[i][j];
row = i+1;
col = j+1;
}
}
}
System.out.println(max);
System.out.println(row + " " + col);
}
}
결과값도 잘 나오는데,, 하지만,,
확인해보니
if (arr[i][j] > max) { // >= 로 바꿔야됨!!!
max = arr[i][j];
row = i+1;
col = j+1;
}
이부분이 문제였다!! 분명 최댓값이 두 개 이상이면 그 중 하나만 출력하라해서 나는 가장 최근의 값을 max로 설정하는 로직을 구현했지만,
그게 아니였다,, >= 으로 고치니 정답처리되었다!
[최종코드]
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[][] arr = new int[9][9];
int max = 0;
int row = 0;
int col = 0;
for (int i = 0; i < 9; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < 9; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
if (arr[i][j] >= max) {
max = arr[i][j];
row = i+1;
col = j+1;
}
}
}
System.out.println(max);
System.out.println(row + " " + col);
}
}
배운점
문제를 더욱 자세히 확인하고 로직을 구현해야겠다고 생각이 들었다!
또한 로직 구현에 대해 더 깊이 생각해야겠다는 생각이 들었다!
'코딩테스트 > 백준' 카테고리의 다른 글
[백준 JAVA] 2536 - 색종이 (1) | 2024.11.27 |
---|---|
[백준 JAVA] 10798 - 세로읽기 (1) | 2024.11.27 |
[백준 JAVA] 2738 - 행렬 덧셈 (0) | 2024.11.27 |
[백준 JAVA] 25206 - 너의 평점은 (0) | 2024.11.26 |
[백준 JAVA] 1316 - 그룹 단어 체커 (0) | 2024.11.25 |