๐Ÿ•๏ธ ICPC Sinchon/Divide and Conquer

[BOJ][C++] ๋ฐฑ์ค€ 24460๋ฒˆ: ํŠน๋ณ„์ƒ์ด๋ผ๋„ ๋ฐ›๊ณ  ์‹ถ์–ด

์„ ๋‹ฌ 2024. 8. 16. 03:26
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/24460

 

๋ฌธ์ œ

HCPC 2021์— ์ฐธ์„ํ•œ N×N๋ช…์˜ ์‚ฌ๋žŒ๋“ค์ด ์˜์ž๊ฐ€ ์ •์‚ฌ๊ฐํ˜• ํ˜•ํƒœ๋กœ ๋ฐฐ์น˜๋œ ๋Œ€ํšŒ์žฅ์—์„œ ๋Œ€ํšŒ๋ฅผ ํ•œ๋‹ค. ๋ชจ๋“  ์˜์ž์—๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ถ”์ฒจ๋ฒˆํ˜ธ๊ฐ€ ์ ํ˜€์žˆ์œผ๋ฉฐ HCPC 2021์˜ ๋งˆ์ง€๋ง‰์—๋Š” ์•„๋ž˜์— ์„ค๋ช…๋œ ๊ทœ์น™์— ๋”ฐ๋ผ ํŠน๋ณ„์ƒ์„ ๋ฐ›์„ ์‚ฌ๋žŒ ํ•œ ๋ช…์„ ์ •ํ•œ๋‹ค.

  1. ํŠน๋ณ„์ƒ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ํ•œ ๋ช…์ด๋ผ๋ฉด, ๊ทธ ์‚ฌ๋žŒ์ด ๋ฝ‘ํžŒ๋‹ค.
  2. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ, ๋Œ€ํšŒ์žฅ์„ ๊ฐ™์€ ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ๋„ค ๊ฐœ๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ ๊ตฌ์—ญ์—์„œ ์ด ๊ทœ์น™์„ ์žฌ๊ท€์ ์œผ๋กœ ์ ์šฉํ•ด์„œ ๊ตฌ์—ญ๋งˆ๋‹ค ํ•œ ๋ช…์”ฉ ์ด ๋„ค ๋ช…์„ ๋ฝ‘๋Š”๋‹ค.
  3. ๋ฝ‘ํžŒ ๋„ค ๋ช… ์ค‘ ์˜์ž์— ์ ํžŒ ์ถ”์ฒจ๋ฒˆํ˜ธ๊ฐ€ ๋‘ ๋ฒˆ์งธ๋กœ ์ž‘์€ ์‚ฌ๋žŒ์ด ๋ฝ‘ํžŒ๋‹ค.

HCPC 2021์— ์ฐธ๊ฐ€ํ•œ ์ง€์›์ด๋Š” ์ž์‹ ์˜ ์‹ค๋ ฅ์ด ๋ถ€์กฑํ•ด์„œ ์ˆ˜์ƒ๊ถŒ์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•˜์˜€๊ณ , ์‹ค๋ ฅ๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํŠน๋ณ„์ƒ์„ ๋…ธ๋ฆฌ๊ณ  ์žˆ๋‹ค.

์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.

 

์œ„์™€ ๊ฐ™์€ ์˜์ž ๋ฐฐ์—ด์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ์ด๋ฅผ ๋„ค ๊ฐœ์˜ ๊ตฌ์—ญ์œผ๋กœ ๋‚˜๋ˆ„๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

๋‚˜๋ˆ„์–ด์ง„ ๊ตฌ์—ญ์˜ ์™ผ์ชฝ ์œ„ ๊ตฌ์—ญ์„ ๋‹ค์‹œ ๋„ค ๊ฐœ์˜ ๊ตฌ์—ญ์œผ๋กœ ๋‚˜๋ˆ„๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

์—ฌ๊ธฐ์—์„œ ์ถ”์ฒจ๋ฒˆํ˜ธ๊ฐ€ ๋‘ ๋ฒˆ์งธ๋กœ ๋‚ฎ์€ ์‚ฌ๋žŒ์„ ๊ณ ๋ฅด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

์ด์™€ ๊ฐ™์€ ์ž‘์—…์„ ๋ชจ๋“  ์˜์—ญ์— ๋Œ€ํ•ด ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

๋”ฐ๋ผ์„œ ํŠน๋ณ„์ƒ์„ ๋ฐ›๋Š” ์ถ”์ฒจ๋ฒˆํ˜ธ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

๋”ฐ๋ผ์„œ, ์ถ”์ฒจ๋ฒˆํ˜ธ 3์ด ์ ํžŒ ์˜์ž์— ์•‰์€ ์ฐธ๊ฐ€์ž๊ฐ€ ํŠน๋ณ„์ƒ์„ ๋ฐ›๋Š”๋‹ค.

์˜์ž ๊ฐ๊ฐ์— ์ ํ˜€ ์žˆ๋Š” ์ถ”์ฒจ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ์ง€์›์ด๊ฐ€ HCPC 2021์—์„œ ๊ฒฝํ’ˆ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ ค๋ฉด ์–ด๋–ค ์˜์ž์— ์•‰์•„์•ผ ํ•˜๋Š”์ง€ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (๋‹จ, N=2m, 0≤m≤10, m์€ ์ •์ˆ˜)

๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ ์ค„์˜ i๋ฒˆ์งธ ์ค„์—๋Š” i๋ฒˆ์งธ ์ค„์— ์žˆ๋Š” ์˜์ž์— ์ ํžŒ ์ถ”์ฒจ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ์ค„์—๋Š” N๊ฐœ์˜ ์ถ”์ฒจ๋ฒˆํ˜ธ๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค.

์ถ”์ฒจ๋ฒˆํ˜ธ๋Š” 231 ๋ณด๋‹ค ์ž‘์€ ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜์ด๊ณ , ๋ชจ๋“  ์ถ”์ฒจ๋ฒˆํ˜ธ๋Š” ์„œ๋กœ ๋‹ค๋ฆ„์ด ๋ณด์žฅ๋œ๋‹ค.

์ถœ๋ ฅ

์ง€์›์ด๊ฐ€ HCPC 2021์—์„œ ๊ฒฝํ’ˆ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ์•‰์•„์•ผ ํ•˜๋Š” ์˜์ž์— ์ ํžŒ ์ถ”์ฒจ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ ๋ถ„ํ• ์ •๋ณต ๋ฌธ์ œ

// ํ’€์ด : https://whkakrkr.tistory.com

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int recur(int a, int b, int c, int d, vector<vector<int>>&v) {
    if(a==c & b==d) {
        return v[a][b];
    }
    
    int x = (c+a)/2;
    int y = (d+b)/2;
    
    vector<int>tmp(4);
    tmp[0] = recur(a,b,x,y, v);
    tmp[1] = recur(a,y+1,x,d, v);
    tmp[2] = recur(x+1,b,c,y, v);
    tmp[3] = recur(x+1,y+1,c,d, v);
    
    sort(tmp.begin(), tmp.end());
    return tmp[1];
}

int main() {
    int n;
    cin >> n;
    vector<vector<int>>v(n, vector<int>(n));
    for(int i=0; i<n; i++) {
        for(int j=0; j<n; j++) {
            cin >> v[i][j];
        }
    }
    
    cout << recur(0,0,n-1,n-1, v);
    
    
    return 0;
}

 

 

๋ฐ˜์‘ํ˜•