백준 2566 최댓값 Java: 9×9 입력에서 행과 열 찾기

반응형

백준 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 재제출은 확인하지 못했다.

반응형
KEEP READING
카테고리 전체 보기 →

댓글