๋ฌธ์ :
https://www.acmicpc.net/problem/2630
ํ์ด :
๋ค์๊ณผ ๊ฐ์ด ์์ข ์ด๊ฐ ์์๋ ์ ์ฌ๊ฐํ ํฌ๊ธฐ๋ก ๋๋ ์์ข ์ด๊ฐ ๋ชจ๋ ํ๋๋ฉด์ ๋๋ ํ์๋ฉด์ ๋๊ฒ ํ๋ ์์ ์ ์ฌ๊ฐํ ์์ข ์ด๋ก ๋ง๋ค๊ณ ๋ง๋ค์ด์ง ํฐ ์์ข ์ด ๊ฐ์, ํ๋ ์์ข ์ด ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ ๋ค.
์ฆ ๋ถํ ์ ๋ณต์ ํตํด ํ๋ค์ด ๋ฐฉ์์ผ๋ก ๋๋ ์ง ์์ข ์ด๊ฐ ์กฐ๊ฑด์ ๋ง๋ ์์ข ์ด์ธ์ง ๊ฒ์ฌํ๋ฉด ๋๋ค. ์์ข ์ด ํฌ๊ธฐ๊ฐ 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;
}
'Algorithm๐ฐ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] Swift 2468 ์์ ์์ญ BFS (0) | 2022.03.11 |
---|---|
[๋ฐฑ์ค] 1516 ๊ฒ์ ๊ฐ๋ฐ (0) | 2022.03.03 |
[๋ฐฑ์ค] 3020 ๊ฐ๋ฅ๋ฒ๋ prefix sum(๋์ ํฉ) (0) | 2022.02.21 |
[๋ฐฑ์ค] 13549 ์จ๋ฐ๊ผญ์ง 3 dijkstra (0) | 2022.02.17 |
[๋ฐฑ์ค] 1018 ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ brute force (0) | 2022.02.17 |
๋๊ธ