Algorithms/백준

[백준] '최댓값' - Java

LEFT 2023. 7. 16. 17:57

<문제 제시>

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

<예시 입출력>


<문제 해결 과정>

모든 인덱스를 돌며 max값을 찾아내야한다. 1열부터 찾아야하므로 x와 y 변수에 i + 1, j + 1을 각각 해준다.


Answer 1) 

for(int i = 0; i < arr.length; i++) {
    for(int j = 0; j < arr[0].length; j++) {
        if(arr[i][j] >= max) {
            max = arr[i][j];
            // 1열부터 시작된다고 고지되어있으므로 +1을 해줌
            x = i + 1;
            y = j + 1;
        }
    }
}

if(arr[i][j] >= max) 조건문으로 max값을 쉽게 찾아낼 수 있었다.


<전체코드>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		
		int[][] arr = new int[9][9];
		
		// INPUT : 9 x 9 
		for(int i = 0; i < 9; i++) {
			st = new StringTokenizer(br.readLine());
			for(int j = 0; j < 9; j++) {
				arr[i][j] = Integer.parseInt(st.nextToken());
			}
		}
		// 1차 테스트 : 2차원 배열 데이터출력
		System.out.println(Arrays.deepToString(arr));
		
		// 2. 최대값 찾기
		int max = 0;
		int x = 0;
		int y = 0;
		
		for(int i = 0; i < arr.length; i++) {
			for(int j = 0; j < arr[0].length; j++) {
				if(arr[i][j] >= max) {
					max = arr[i][j];
					// 1열부터 시작된다고 고지되어있으므로 +1을 해줌
					x = i + 1;
					y = j + 1;
				}
			}
		}
		
		System.out.println(max + "\n" + x + " " + y);
	}

}

StringTokenizer를 통해 2차원 배열의 값을 입력받고,

arr[i][j] >= max 를 통해 max값을 쉽게 찾아낼 수 있었다.


문제링크)
https://www.acmicpc.net/problem/2566

 

2566번: 최댓값

첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.

www.acmicpc.net