티스토리 뷰

백준/java

[백준 2566 / JAVA] 최댓값

3284921 2024. 11. 14. 15:55

[단계별로 풀어보기] 백준 2566 최댓값

 

문제: <그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.

 

해설: 다음과 같은 순서로 코드를 작성했다.

1. 9*9 배열을 생성한다.

2. 해당 배열에 순차적으로 값을 넣는다.

3. 최대값 max, 최대값을 저장하는 배열의 행렬을 각각 row, col로 저장하는 변수를 만들고 행렬을 1행 1열부터 9행 9열까지 순차적으로 방문하여 현재 최대값 max랑 비교한다. 만약 현재 최대값 max보다 배열에 들어있는 값이 크다면 max와 row, col을 업데이트한다. 

 

다만 분명 맞게 코드를 작성한 것 같은데 자꾸 틀렸다고 해서 어떤 게 문제인지 찾아보았다.

모든 값이 0인 행렬( 0 0 0 0 0 0 0 0 0 ...)의 경우 max, row, col값이 업데이트되지 않아 각각의 초기값이 출력된다.

이때 row, col의 초기값을 각각 0, 0으로 해두어 0 0 0 0 0... 행렬을 입력값으로 넣었을 때 

 

0

0 0

으로 출력되었던 것이다. 

0

1 1

이렇게 출력되어야 맞다. (0행 0열은 없는 값이니..)

 

따라서 오류가 발생한다면 초기값을 0이나 음수로 설정한 것은 아닌지 확인해봐야 한다.

 

 

코드:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int arr[][] = new int[9][9];
        Scanner sc = new Scanner(System.in);

        for(int i = 0; i < 9; i++){
            for (int j = 0; j < 9; j++){
                arr[i][j] = sc.nextInt();
            }
        }

        int max = arr[0][0];
        int row = 1, col = 1; // 초기값을 1행 1열로 해줘야 마지막에 오류 발생하지 않는다 

        for (int i = 0; i<9;i++){
            for (int j = 0; j < 9; j++){
                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' 카테고리의 다른 글

[SWEA 1859 / JAVA] 백만 장자 프로젝트  (0) 2024.11.19
[백준 2563 / JAVA] 색종이  (2) 2024.11.15
[백준 2738 / JAVA] 행렬 덧셈  (0) 2024.11.14
[백준 9086 / JAVA] 문자열  (1) 2024.11.14
[백준 2743 / JAVA] 단어 길이 재기  (0) 2024.11.14
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함