첫째 줄에 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];
}
}
}