세상에 나쁜 코드는 없다
[백준] 2630번: 색종이 만들기 본문
https://www.acmicpc.net/problem/2630
#include <iostream>
using namespace std;
int board[128][128];
int boardSize;
int blue=0, white=0;
bool isSameColor(int x, int y, int size)
{
int color = board[x][y];
for(int i=0; i<size; i++)
{
for(int j=0; j<size; j++)
{
if(board[x+i][y+j] != color)
{
return false;
}
}
}
return true;
}
void count(int x, int y, int size)
{
if(isSameColor(x,y,size))
{
if(board[x][y] == 1)
blue++;
else
white++;
}
else
{
count(x,y,size/2);
count(x,y+size/2,size/2);
count(x+size/2,y,size/2);
count(x+size/2,y+size/2,size/2);
}
}
void init()
{
cin >> boardSize;
for(int i=0; i< boardSize; i++)
{
for(int j=0; j<boardSize; j++)
{
cin >> board[i][j];
}
}
}
int main() {
init();
count(0,0,boardSize);
cout << white << endl << blue;
return 0;
}
문제는 사각형을 4개로 분할하여 정복하는 방법을 사용했다. 분할정복법을 처음으로 사용해서 해결하는 문제였지만 문제의 난이도가 쉬워 편하게 구현할 수 있었다. isSameColor 함수도 분할정복으로 구현하고 싶었는데 그러지 못해서 아쉬웠고 다음에 기회가 된다면 새롭게 구현해 보고 싶다.
'Computer Science > Problem Solving' 카테고리의 다른 글
[백준] 1003번 : 피보나치 함수 (0) | 2021.04.27 |
---|---|
[백준] 1149번: RGB거리 - 드디어 dp 해결 (0) | 2021.04.06 |
[백준] 15661번: 링크와 스타트 (0) | 2021.03.01 |
[백준] 7568번: 덩치 (0) | 2021.03.01 |
[백준] 1018번: 체스판 다시 칠하기 (0) | 2021.03.01 |