[작성일: 2023. 09. 14]
https://www.acmicpc.net/problem/2566


풀이
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int[][] arr = new int[9][9]; int max = 0; int iLoc = 0; int jLoc = 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.valueOf(st.nextToken()); if (arr[i][j] >= max) { max = arr[i][j]; iLoc = i + 1; jLoc = j + 1; } } } bw.write(max +"\n"); bw.write(iLoc + " " + jLoc); br.close(); bw.flush(); bw.close(); } }
이 문제는 쉽게 풀었으나 한 가지를 놓쳐서 채점 시 자꾸 틀렸다고 떴다.
출력시간이 120ms를 초과했나 생각해서 Scanner로 풀었던 문제를 BufferedReader로 수정해서 풀었으나 계속 틀렸다고만 나왔다.
문제에서 "최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다." 라는 문장을 그냥 넘겼었는데,
arr[i][j] > max 를 arr[i][j] >= max로 수정하니 정답 채점이 되었다.
제시된 예제에서는 90이 하나밖에 없어서 맞는 것처럼 보이지만 예제를 수정해서 90을 하나 더 추가하게 되면 맨 처음 나오는 90이 최댓값에서 변하지 않는다.
>=로 변경하게 되면 최댓값이 두 개 이상있어도 마지막에 나오는 최댓값으로 업데이트 되니 >와 >=로 정답이 바뀌는 것이다.