[BOJ] 17829 - (222-풀링)

suhyun·2022년 11월 1일
0

백준/프로그래머스

목록 보기
31/81

문제 링크

17829-(222-풀링)


입력

첫째 줄에 N(2 ≤ N ≤ 1024)이 주어진다. N은 항상 2의 거듭제곱 꼴이다. (N=2K, 1 ≤ K ≤ 10)
다음 N개의 줄마다 각 행의 원소 N개가 차례대로 주어진다. 행렬의 모든 성분은 -10,000 이상 10,000 이하의 정수이다


출력

마지막에 남은 수를 출력한다.


문제 풀이

재귀함수 사용
사각형의 사이즈가 2일때와 2가 아닐때로 나눠서 생각
2차원 배열의 수들을 새로운 1차원 배열에 집어넣고 정렬
그 후 두번째 큰 수 뽑아내기

천천히 생각해보면 금방 풀지만
급하게 생각하면 금방 못 푸는 문제랄까..?

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

public class Main {
    static int[][] matrix;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        matrix = new int[n][n];
        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            for (int j = 0; j < n; j++) {
                matrix[i][j] = Integer.parseInt(st.nextToken());
            }
        }
        System.out.println(solution(0, 0, n));

    }

    static int solution(int i, int j, int size) {
        int[] arr;

        if (size == 2) {
            arr = new int[4];
            int idx = 0;
            for (int r = i; r < i + 2; r++) {
                for (int c = j; c < j + 2; c++) {
                    arr[idx++] = matrix[r][c];
                }
            }
            Arrays.sort(arr);
            return arr[2];
        } else {
            arr = new int[4];
            size /= 2;

            arr[0] = solution(i, j, size);
            arr[1] = solution(i, j + size, size);
            arr[2] = solution(i + size, j, size);
            arr[3] = solution(i + size, j + size, size);

            Arrays.sort(arr);
            return arr[2];
        }
    }
}

profile
꾸준히 하려고 노력하는 편 💻

0개의 댓글