๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm๐Ÿฐ/๋ฐฑ์ค€

[๋ฐฑ์ค€] 2630 ์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ

by Jouureee 2022. 2. 24.

๋ฌธ์ œ :

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

 

2630๋ฒˆ: ์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ

์ฒซ์งธ ์ค„์—๋Š” ์ „์ฒด ์ข…์ด์˜ ํ•œ ๋ณ€์˜ ๊ธธ์ด N์ด ์ฃผ์–ด์ ธ ์žˆ๋‹ค. N์€ 2, 4, 8, 16, 32, 64, 128 ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ƒ‰์ข…์ด์˜ ๊ฐ ๊ฐ€๋กœ์ค„์˜ ์ •์‚ฌ๊ฐํ˜•์นธ๋“ค์˜ ์ƒ‰์ด ์œ—์ค„๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์ค„๊นŒ์ง€ ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

 

ํ’€์ด :

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ‰์ข…์ด๊ฐ€ ์žˆ์„๋•Œ ์ •์‚ฌ๊ฐํ˜• ํฌ๊ธฐ๋กœ ๋‚˜๋ˆ  ์ƒ‰์ข…์ด๊ฐ€ ๋ชจ๋‘ ํŒŒ๋ž€๋ฉด์„ ๋˜๋Š” ํ•˜์–€๋ฉด์„ ๋„๊ฒŒ ํ•˜๋Š” ์ž‘์€ ์ •์‚ฌ๊ฐํ˜• ์ƒ‰์ข…์ด๋กœ ๋งŒ๋“ค๊ณ  ๋งŒ๋“ค์–ด์ง„ ํฐ ์ƒ‰์ข…์ด ๊ฐœ์ˆ˜, ํŒŒ๋ž€ ์ƒ‰์ข…์ด ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ๋‹ค. 

์ฆ‰ ๋ถ„ํ•  ์ •๋ณต์„ ํ†ตํ•ด ํƒ‘๋‹ค์šด ๋ฐฉ์‹์œผ๋กœ ๋‚˜๋ˆ ์ง„ ์ƒ‰์ข…์ด๊ฐ€ ์กฐ๊ฑด์— ๋งž๋Š” ์ƒ‰์ข…์ด์ธ์ง€ ๊ฒ€์‚ฌํ•˜๋ฉด ๋œ๋‹ค. ์ƒ‰์ข…์ด ํฌ๊ธฐ๊ฐ€ 1x1์ผ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฏ€๋กœ ์žฌ๊ท€๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐํ• ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 

c++ ์ฝ”๋“œ :

//
//  colorPaper.cpp
//  SOMA๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป
//
//  Created by JoSoJeong on 2022/02/24.
//

#include <iostream>
#include <string.h>

using namespace std;
int map[129][129];
int N;
int w = 0, b = 0;

void make_count(int x, int y, int len){
    int temp = 0;
    for(int i = x; i < x + len; i++){
        for(int j = y; j < y + len; j++){
            if(map[i][j]) { temp++; }
        }
    }
    if (!temp) { // ์ „์ฒด ๋‹ค ํฐ์ƒ‰
        w++;
    }else if(temp == len * len) { // ์ „์ฒด ๋‹ค ๋ธ”๋ฃจ
        b++;
    }else {
        make_count(x, y, len / 2);
        make_count(x + len/2, y, len / 2);
        make_count(x, y + len/2 , len / 2);
        make_count(x + len/2, y + len/2 , len / 2);
    }
    return;
}

int main(){
    cin >> N;
    memset(map, 0, sizeof(map));
    for(int i = 0; i < N; i++){
        for(int j = 0; j < N; j++){
            cin >>map[i][j];
        }
    }
    
    make_count(0, 0, N);
    cout << w << '\n';
    cout << b << '\n';
    return 0;
}

๋Œ“๊ธ€