본문 바로가기
JAVA 코딩 알고리즘 연습/백준

백준 - 최댓값 (2562번) / JAVA (자바) 코딩 알고리즘 연습

by easpop 2024. 8. 16.
728x90
반응형

최댓값 성공스페셜 저지

 
 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 128 MB 96689 38595 33831 41.149%

문제

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

예를 들어, 다음과 같이 81개의 수가 주어지면

 1열2열3열4열5열6열7열8열9열1행2행3행4행5행6행7행8행9행
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열에 위치한다.

입력

첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100보다 작은 자연수 또는 0이다.

출력

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

예제 입력 1 복사

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

예제 출력 1 복사

90
5 7

728x90
반응형

쉬운것 같았지만 은근히 헷갈렸던 문제....;

 

일단 크게 보면, 숫자를 비교해가면서 가장 큰 값 max를 받아주고,

그 숫자의 위치로 좌표를 구한다.

 

예를 들자면, 위의 9 * 9 격자판에서 보자면, 맨 왼쪽 상단부터 위치값이 1, 2, 3.. 이런식으로 부여한다고 친다.

그렇게 계산을 하면, 가장 큰 숫자는 90이고, 43번째 있는 숫자이다.

 

53을 9로 나누면 몫은 4이고 나머지가 7으로 나올 것이다.

몫에다가 1을 더해야지 5번째 행에 있는 것을 표현할 수 있으므로 b에다가 1을 더해준다.

그리고, 나머지 값이 열의 위치가 된다.

하지만, 주의해야 할 점이, 9번째 열의 경우 값이 딱 맞아 떨어지면서 숫자가 틀어지기 때문에 주의해야 한다.

if문의 c == 0으로 맞아떨어질 때 처리하는 부분을 참고.

 

설명보다 코드로 보는게 더 이해가 더 쉬울 것 같다;;ㅜㅜㅋㅋㅋ

 

import java.util.Scanner;

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

        Scanner scanner = new Scanner(System.in);
        int max = 0;
        int idx = 0;

        for (int i = 1; i <= 81; i++) {

            int a = scanner.nextInt();

            if (max <= a) {
                max = a;
                idx = i;
            }
        }

        int b = idx / 9;
        int c = idx % 9;

        if (c == 0) {
            c = 9;
            b -= 1;
        }

        System.out.println(max);
        System.out.print(b+1 + " " + c);

    }
}
728x90
반응형

댓글