![[백준 C++] 2630 : 색종이 만들기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIrCkf%2FbtsMw4gBxzt%2FG62guLUUhT5OqKUi5CGZe1%2Fimg.png)
[백준 C++] 2630 : 색종이 만들기CSE/코딩 문제풀이2025. 2. 25. 15:31
Table of Contents
https://www.acmicpc.net/problem/2630
예시로 주어진 사진과 함께 생각해보면 2의 배수로 주어지는 N이 나눌때마다 2 / N로 계속 줄어드는 것을 볼 수 있다.
즉 첫 시작점만 정해주게 되면 줄어드는 값을 더해 끝점을 구할 수 있고, 시작점과 끝점 안에 있는 내용을 확인하여 색이 모두 일치하는지 보면 된다.
#include <iostream>
#include <vector>
using namespace std;
int N;
vector<vector<int>> board;
vector<int> answer;
void solve(int sX, int sY, int size)
{
if (size == 0)
return;
bool bClear = true;
int color = board[sY].at(sX);
for (int y = sY; y < sY + size; y++)
{
for (int x = sX; x < sX + size; x++)
{
if (color != board[y].at(x))
{
bClear = false;
break;
}
}
}
if (bClear)
{
if (color == 0)
answer[0]++;
else
answer[1]++;
}
else
{
solve(sX, sY, size / 2);
solve(sX + (size / 2), sY, size / 2);
solve(sX, sY + (size / 2), size / 2);
solve(sX + (size / 2), sY + (size / 2), size / 2);
}
}
int main()
{
cin >> N;
board = vector<vector<int>>(N, vector<int>(N, 0));
answer = vector<int>(2, 0);
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
int temp;
cin >> temp;
board[i].at(j) = temp;
}
}
solve(0, 0, N);
cout << answer[0] << '\n' << answer[1] << '\n';
return 0;
}
색을 확인하기 위해 bool변수인 bClear를 이용하였고 나머지는 재귀로 구현하였다.
'CSE > 코딩 문제풀이' 카테고리의 다른 글
[백준 C++] 2805 : 나무 자르기 (0) | 2025.03.10 |
---|---|
[백준 C++] 17626 : Four Squares (0) | 2025.03.03 |
[백준 C++] 11727 : 2×n 타일링 2 (0) | 2025.02.24 |
[백준 C++] 11726 : 2×n 타일링 (0) | 2025.02.23 |
[백준 C++] 9375 : 패션왕 신해빈 (0) | 2025.02.23 |
@NiffJB :: 개발하는 니프
CSE & GAME 개발 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 부탁드립니다!