[Java] 백준 2566번: 최댓값

hansung's·2024년 2월 21일
0

문제 url:
최댓값

문제:

🤔 문제 알아보기

  • 먼저 9행 9열의 배열에 값이 한 줄에 9개씩 9번 들어간다.
  • 거기서 최댓값과 최댓값이 속한 위치를 출력한다.
  • 9행 9열의 배열이 필요할 것으로 보인다.
  • 최댓값과 행, 열에대한 변수도 필요하다.

😎 준비 하기

1.BufferedReader를 이용해 입력을 받는다.
2.9행 9열의 배열을 생성
3.최댓값(max)와 행(row), 열(col)을 받을 변수 생성
4.9행이므로 9번 반복하는 반복문과 공백으로 구분된 9개의 문자를 배열에 넣을 반복문 생성
5. 거기서 max값과 비교하며 max보다 크다면 값과 인덱스 번호를 초기화
↘ max가 여러개면 하나만 출력하라고 했으니 arr[i][j] > max로 하여 동수가 초기화 될 수 없게 설정
6. 출력하기

🐱‍👤 실제 코드

import java.io.*;
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 = null;
        int[][] arr = new int[9][9];

        //최댓값(나올 수 없는 수 -1을 초기화)과 해당 위치를 출력하기 위한 변수
        int max = -1;
        int row = -1;
        int col = -1;

        for (int i = 0; i< 9; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < 9; j++) {

                // st에 저장되어 있는 토큰을 하나씩 불러와 arr배열에 저장
                arr[i][j] = Integer.parseInt(st.nextToken());

                // 만약 해당 값이 최댓값보다 크다면 max에 초기화 및 row col 역시 초기화
                // 문제를 보면 두 개 이상인 경우 한 곳 위치만 하면 되기때문에 >=를 하지 않아도 된다.
                // row와 col에 +1을 한 것은 인덱스는 0부터 시작하기 떄문이다.
                if (arr[i][j] > max) {
                    max = arr[i][j];
                    row  = i+1;
                    col = j+1;
                }
            }

        }
        br.close();

        //출력
        System.out.println(max);
        System.out.println(row + " " + col);

    }

}

🤢 회고

2차원 배열로 생각하고 푼 후 다른 코드를 확인하였는데, 입력과 동시에 해결해서 불필요한 배열 생성을 줄여서 푼 글을 봤다.
지금은 2차원 배열 연습이라 생각해서 해보진 않았지만, 해당 글과 같이 주어진 방향대로 풀지 않고 좀 더 빠르게 풀 수 있는 방법을 강구해보록 하겠다.

profile
ABAPER를 꿈꾸는 개발자

0개의 댓글