[백준/JAVA] 2566 : 최댓값 (2차원 배열)
문제
<그림 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%대였나보다.
- 출처