백준 2566번 ‘최댓값’은 9×9 격자의 81개 수를 읽으면서 가장 큰 값과 위치를 갱신하면 된다. 전체 배열을 저장할 필요는 없고, 현재 최댓값과 행·열만 유지하면 된다.
입력과 동시에 최댓값 갱신하기
행과 열을 순서대로 순회하면서 새 값이 현재 최댓값보다 클 때 세 값을 함께 바꾼다.
maxValue: 지금까지 본 수의 최댓값maxRow: 최댓값이 나온 행maxColumn: 최댓값이 나온 열
입력값은 0 이상이므로 최댓값 초기값을 -1로 두면 첫 번째 수가 반드시 선택된다. 같은 최댓값이 여러 곳에 있으면 그중 한 곳을 출력해도 되므로 >를 사용해 처음 발견한 위치를 유지했다. >=를 사용해 마지막 위치를 선택해도 문제 조건에는 맞는다.
Java 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(
new InputStreamReader(System.in)
);
int maxValue = -1;
int maxRow = 0;
int maxColumn = 0;
for (int row = 1; row <= 9; row++) {
StringTokenizer tokenizer = new StringTokenizer(
reader.readLine()
);
for (int column = 1; column <= 9; column++) {
int value = Integer.parseInt(tokenizer.nextToken());
if (value > maxValue) {
maxValue = value;
maxRow = row;
maxColumn = column;
}
}
}
System.out.println(maxValue);
System.out.println(maxRow + " " + maxColumn);
}
}
행과 열을 처음부터 1로 순회해 출력 좌표를 다시 보정하지 않도록 했다. 원문 코드처럼 10×10 배열의 0번째 행과 열을 padding으로 비워 둘 수도 있지만, 이 문제에서는 값을 다시 사용하지 않으므로 저장 자체를 생략하는 편이 단순하다.
공식 예제에서 확인할 값
공식 예제의 최댓값은 90이고 위치는 5행 7열이다.
90
5 7
모든 값이 0인 입력도 확인해야 한다. 초기값을 0으로 두고 위치를 갱신하지 않는 code라면 0 0이라는 잘못된 좌표가 남을 수 있다. -1로 시작하면 첫 칸 1 1이 정상적으로 기록된다.
다시 알고리즘을 풀기 시작한 기록
원문에는 입사 후 한동안 알고리즘 풀이를 쉬었다가 Windows·Eclipse 환경에서 Mac·IntelliJ 환경으로 옮긴 뒤 다시 문제를 잡았다고 적혀 있다. IntelliJ 단축키와 Mac에 익숙해지고 녹슨 감각을 되찾기 위해 쉬운 문제부터 1일 1커밋을 해보려던 시점의 기록이었다.
이 계획을 실제로 얼마나 이어 갔는지는 원문만으로 확인할 수 없다. 다만 이 문제를 배열 저장 없이 다시 쓰면서, 구현 문제에서는 자료구조보다 입력 순서와 초기값이 먼저라는 점은 분명하게 남는다.
정렬까지 필요한 구현은 백준 2587 대표값2, 대량 입력 함수의 차이는 Python input과 readline에서 이어서 볼 수 있다.
복잡도와 검증 범위
9×9 입력으로 크기가 고정돼 있어 실제 비용은 상수다. 일반적인 R×C 격자로 보면 시간 복잡도는 O(RC), 추가 공간은 O(1)이다.
Java source를 수동 검토하고 공식 예제, 모든 값이 0인 경우, 최댓값이 여러 번 나오는 경우를 독립 oracle로 확인했다. 2026년 8월 2일 현재 BOJ 문제 URL은 채점 서비스 준비 화면이므로 current judge 재제출은 확인하지 못했다.
'배움과 성장 > 알고리즘·문제풀이' 카테고리의 다른 글
| 백준 25305 커트라인 Java: primitive 배열 정렬 오류를 바로잡은 풀이 (0) | 2022.11.25 |
|---|---|
| 백준 2587 대표값2 Java 풀이: 평균과 중앙값 구하기 (0) | 2022.11.24 |
| 백준 11779 최소비용 구하기 2 Java: 다익스트라 경로 복원 (0) | 2022.07.21 |
| 백준 1916 최소비용 구하기 Java: PriorityQueue 다익스트라 (0) | 2022.07.15 |
| 백준 1238 파티 Java: 정방향·역방향 Dijkstra 두 번 (0) | 2022.07.03 |
댓글