본문 바로가기

java

백준 2566번 문제 최댓값(Java_자바)

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

 

2566번: 최댓값

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

www.acmicpc.net

 

 

오늘은

백준 사이트  7단계 '2차원 배열 > 2566번 최댓값 '을 풀어보자!   

문제를 확인해 보자!

2566번 최댓값 문제
예제 입력/ 출력

 

 

와... 매번 느끼는 거지만 문제를 볼 때마다

숨이 턱 하고 막히는... 나만 느끼는 건 아닐 거라는...

 


우선!

1줄(0번째 인덱스)부터 9줄(8번째 인덱스) 행과 열 둘다 동일하게 만들어주자!!

import java.util.Scanner;

public class MaximumValue_2566 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int arr[][] = new int[9][9];

        for (int i = 0; i < 9; i++) {   // 0 ~ 8
            for (int j = 0; j < 9; j++) { // 0 ~ 8
                arr[i][j] = sc.nextInt();
            }
        }

        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                System.out.print(arr[i][j]+" ");
                if(j == 8){
                    System.out.println();
                }
            }
        }

    }
}

 

행렬이 잘 나오는지 확인해 보자!

input 행렬 -> output 행렬

 

오! 잘 나오는 거 같은데?


이젠 저 행렬 값들 중 1. 최댓값이 무엇인지?

2. 큰 최댓값의 위치(행과 열)를 출력해 주자!

 

 

출력 시 표현할 최댓값을 저장할 변수

최댓값의 행(row)과 열(column)을 저장할 변수를 아래처럼 선언해 주자!

        int maxVal = 0;     // 최댓값
        int rw = 0;         // 행
        int cl = 0;         // 열

 

 

문제가 요구하는

출력값을 뽑기 위한

마지막 조건을 추가하자!

 

예를 들어 설명하자면

maxVal  초기값인 0보다 3 (arr [0][0]) 이 크니깐

maxVal 변수에 3을 넣어주고,
rw(행) 변수에는 i+11을 넣고,

  cl(열) 변수에는 j+11을 넣어주자..

 

위와 다르게 하면

for문의 초기치 i, j 값을 1로 조건식 i <= 9, j <=9  반복 수행으로 바꾸면
maxVal 은 동일하게 두고,
이미 초기치를 1로 잡아서i+1, j+1을 하지 않아도 된다!

       for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if (maxVal < arr[i][j]) {
                    maxVal = arr[i][j];
                    rw = i + 1; 
                    cl = j + 1;
                }
            }
        }

 

이제 다 합치자!!!


 

Scanner

import java.util.Scanner;

public class MaximumValue_2566 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int arr[][] = new int[9][9];

        int maxVal = 0;     // 최댓값
        int rw = 0;         // 행
        int cl = 0;         // 열

        for (int i = 0; i < 9; i++) {     // 0 ~ 8
            for (int j = 0; j < 9; j++) { // 0 ~ 8
                arr[i][j] = sc.nextInt();
            }
        }

        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if (maxVal < arr[i][j]) {
                    maxVal = arr[i][j];
                    rw = i + 1;
                    cl = j + 1;
                }
            }
        }
        
        System.out.println(maxVal);
        System.out.print(rw+" "+cl);
    }
}

 

응?...?

실패..?


왜 이러는 걸까...

 

찾았다... 행과 열의 초기값을 0으로 해놨으니깐...

if(maxVal < arr [i][j])  조건식행렬 끝날 때까지 진입하지 않을 경우

초기값 그대로 출력될 수 있는걸....(충격)

        int maxVal = 0;     // 최댓값
        int rw = 1;         // 행
        int cl = 1;         // 열

 

그래서

다시 코드를 바꾸면

import java.util.Scanner;

public class MaximumValue_2566 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int arr[][] = new int[9][9];

        int maxVal = 0;     // 최댓값
        int rw = 1;         // 행
        int cl = 1;         // 열

        for (int i = 0; i < 9; i++) {     // 0 ~ 8
            for (int j = 0; j < 9; j++) { // 0 ~ 8
                arr[i][j] = sc.nextInt();
            }
        }

        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if (maxVal < arr[i][j]) {
                    maxVal = arr[i][j];
                    rw = i + 1;
                    cl = j + 1;
                }
            }
        }

        System.out.println(maxVal);
        System.out.println(rw+" "+cl);
    }
}

 

성공!

 

성공!!!


 

BufferedReader + StringTokenizer

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

public class MaximumValue_2566 {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st;

        int arr[][] = new int[9][9];

        int maxVal = 0;     // 최댓값
        int rw = 1;         // 행
        int cl = 1;         // 열

        for (int i = 0; i < 9; i++) {     // 0 ~ 8
            st=new StringTokenizer(br.readLine());
            for (int j = 0; j < 9; j++) { // 0 ~ 8
                arr[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if (maxVal < arr[i][j]) {
                    maxVal = arr[i][j];
                    rw = i + 1;
                    cl = j + 1;
                }
            }
        }

        System.out.println(maxVal);
        System.out.println(rw+" "+cl);
    }
}

 

두근두근..

 

성공!!!

 

성공이다... 메모리도 시간도 줄었다!

 

 

 

계속하다 보면 실력이 늘 거야!! 파이팅...