[BOJ]17829 222-풀링

강동현·2023년 12월 24일

코딩테스트

목록 보기
45/111
  • sol 재귀: 사각형은 2n2^n의 한 변의 길이로 주어진다.
    절반씩 파고들고, 한 변의 길이가 2가 되었을 때, 부턴째 2번째로 큰 값을 가져온다.
    사각형을 4등분해 가져온 각 값 중, 두번째로 큰 값을 리턴한다.
#include <bits/stdc++.h>
using namespace std;
int N;
vector<vector<int>> board(1025, vector<int>(1025));
int recursion(int x, int y, int n){
    vector<int> vec;
    if(n == 2){
        vector<int> tmp(4);
        int v1 = board[x][y];
        int v2 = board[x+1][y];
        int v3 = board[x][y+1];
        int v4 = board[x+1][y+1];
        tmp[0] = v1, tmp[1] = v2, tmp[2] = v3, tmp[3] = v4;
        sort(tmp.begin(), tmp.end());
        return tmp[2];
    }
    //n = 2 -> 1개
    //n = 4 -> 4개
    //n = 6 -> 9개
    vec.push_back(recursion(x, y, n / 2));
    vec.push_back(recursion(x + n / 2, y, n / 2));
    vec.push_back(recursion(x, y + n / 2, n / 2));
    vec.push_back(recursion(x + n / 2, y + n / 2, n / 2));
    sort(vec.begin(), vec.end());
    return vec[2];
}
int main(){
    cin >> N;
    for(int i = 0; i < N; ++i){
        for(int j = 0; j < N; ++j){
            cin >> board[i][j];
        }
    }
    cout << recursion(0, 0, N);
    return 0;
}
profile
GAME DESIGN & CLIENT PROGRAMMING

0개의 댓글