BOJ

[백준 2566번/JAVA] 최댓값 | 이차원 배열

syj0522 2024. 3. 14. 19:00

문제

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

 

2566번: 최댓값

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

www.acmicpc.net

9 * 9의 행렬에서 최댓값과 최댓값의 위치 구하기
최댓값이 2개 이상이면 그 중 한 곳을 출력한다.

풀이

최댓값의 위치만 알면 되므로 int[9][9]를 사용하지 않고 이중 for문의 i, j값을 이용하여 행, 열을 구하였다.

 

br.readLine()으로 한 줄 읽고 StringTokenizer로 값을 하나씩 가져온다.

 

prev은 이전 값, now는 현재 값인데 둘을 비교하여 now가 더 크면 prev에 now를 집어넣는다.
그렇게 더 큰 값을 만날 때마다 prev를 업데이트해서 비교가 다 끝나면 prev에는 최댓값이 들어가있게 된다.

 

i=0 && j=0인 경우 아직 비교 대상이 없으므로 prev에 1행 1열 값을 대입하고 비교 동작을 스킵한다.

 

prev를 업데이트할 때마다 n, m에 업데이트된 위치(행, 열)을 대입한다.
i, j는 0부터 시작하는데 문제에서 0행, 0열이 아니라 1행, 1열부터 세므로 i+1, j+1을 대입해야 한다.

 

n, m의 초기값은 1, 1이어야 한다.
1행 1열에 있는 값이 최댓값이면 n, m, prev 모든 값이 업데이트되지 않았을 것이므로 초기값 1, 1이 출력되어야한다.

코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;

        int n = 1;
        int m = 1;
        int prev = 0;
        int now;

        for(int i=0; i<9; i++) {
            st = new StringTokenizer(br.readLine());
            for(int j=0; j<9; j++) {
                if(i==0 && j==0) {
                    prev = Integer.parseInt(st.nextToken());
                    continue;
                }else {
                    now = Integer.parseInt(st.nextToken());    
                }
                if (prev < now){
                    prev = now;
                    n = i+1;
                    m = j+1;
                }
            }
        }
        bw.write(prev + "\n");
        bw.write(n + " " + m);
        bw.close();
    }
}