[작성일: 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이 최댓값에서 변하지 않는다.
>=로 변경하게 되면 최댓값이 두 개 이상있어도 마지막에 나오는 최댓값으로 업데이트 되니 >와 >=로 정답이 바뀌는 것이다.