Algorithm/Baekjoon(Java)

[백준/JAVA] 2566 : 최댓값 (2차원 배열)

비망노트 2022. 12. 6. 13:28
문제

<그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때,

이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.

예를 들어, 다음과 같이 81개의 수가 주어지면

이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다.

 

입력

첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100보다 작은 자연수 또는 0이다.

출력

첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다.

최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.

 

예제입력 예제출력
3 23 85 34 17 74 25 52 65
10 7 39 42 88 52 14 72 63
87 42 18 78 53 45 18 84 53
34 28 64 85 12 16 75 36 55
21 77 45 35 28 75 90 76 1
25 87 65 15 28 11 37 28 74
65 27 75 41 7 89 78 64 39
47 47 70 45 23 65 3 41 44
87 13 82 38 31 12 29 29 80
90
5 7

 

⭕ 풀이

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int[][] board = new int[9][9];
        int max = 0;
        int maxRow = 0;
        int maxColumn = 0;
        for(int i=0;i<9;i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            for(int j=0;j<9;j++){
                board[i][j] = Integer.parseInt(st.nextToken());
                if(max<=board[i][j]){
                    max = board[i][j];
                    maxRow = i+1;
                    maxColumn = j+1;
                }
            }
        }
        System.out.println(max);
        System.out.print(maxRow+" "+maxColumn);
        
    }
}

 

✅ 풀이흐름

1. 주어지는 격자판의 크기는 9*9로 일정하므로 [9][9]사이즈의 2차원 배열을 만든다

 

2. 한줄씩 br.readLine()으로 입력받음과 동시에 StringTokenizer에 넣어 자른다.

3. 이렇게 한줄씩 받고 자른뒤 비어있떤 9*9크기의 격자판 한칸한칸에 입력받은 수를 채워준다.

 

4. 이때 각 격자판에 값을 채워주며 for문 바깥에 선언해두었던 max변수를 활용해 최대값을 식별한다.

4-1. 식별하며 각 변수에 max값, 행,열 의 위치를 담아둔다.

 

5. 반복문을 끝내고 최대값과 최대값을 가진 행,열의 위치를 출력한다.

 

❗ )  처음에 max를 비교하는 if문에서

if(max<board[i][j])   이렇게 작성했더니 계속 채점이 100%까지 갔다가 틀렸다고 나오길래 어디가 잘못된건가싶어 살펴봤다.

"최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다." 라고 문제에서 나와있었지만

그 중 한곳이라기보다는 가장 마지막으로 발견된 최대값의 위치를 내보내주면 될 것 같아

if(max<=board[i][j]) 로 비교연산자만 바꿔주었더니 정답처리되었다.

저 부분 때문에 정답률이 40%대였나보다.

 

 

 

 

- 출처

https://www.acmicpc.net/problem/2566