[백준 1780번 C/C++] 종이의 개수
[백준 1780번 C/C++] 종이의 개수
https://www.acmicpc.net/problem/1780
해결전략
재귀
코드
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int n, MinusCnt=0, ZeroCnt=0, OneCnt=0;
vector<vector<int>> v;
bool Check(int y, int x, int size)
{
int firstValue = v[y][x];
for (int i = y; i < y + size; i++) {
for (int j = x; j < x + size; j++) {
if (v[i][j] != firstValue) return false;
}
}
return true;
}
void Cut(int y, int x, int size)
{
if (Check(y, x, size))
{
if (v[y][x] == -1)
MinusCnt++;
else if(v[y][x] == 0)
ZeroCnt++;
else if (v[y][x] == 1)
OneCnt++;
}
else
{
int newSize = size / 3;
Cut(y, x, newSize);
Cut(y, x + newSize, newSize);
Cut(y, x + newSize * 2, newSize);
Cut(y + newSize, x, newSize);
Cut(y + newSize, x + newSize, newSize);
Cut(y + newSize, x + newSize * 2, newSize);
Cut(y + newSize * 2, x, newSize);
Cut(y + newSize * 2, x + newSize, newSize);
Cut(y + newSize * 2, x + newSize * 2, newSize);
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n;
v.resize(n, vector<int>(n));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> v[i][j];
}
}
Cut(0, 0, n);
cout << MinusCnt << "\n";
cout << ZeroCnt << "\n";
cout << OneCnt << "\n";
return 0;
}
유사문제
'⭐ 코딩테스트 > 백준' 카테고리의 다른 글
[백준 1916번 C/C++] 최소비용 구하기 (0) | 2023.07.07 |
---|---|
[백준 2156번 C/C++] 포도주 시식 (0) | 2023.07.06 |
[백준 1992번 C/C++] 쿼드트리 (0) | 2023.07.04 |
[백준 14891번 C/C++] 톱니바퀴 (0) | 2023.07.03 |
[백준 11279번 C/C++] 최대 힙 (0) | 2023.07.03 |
댓글
이 글 공유하기
다른 글
-
[백준 1916번 C/C++] 최소비용 구하기
[백준 1916번 C/C++] 최소비용 구하기
2023.07.07 -
[백준 2156번 C/C++] 포도주 시식
[백준 2156번 C/C++] 포도주 시식
2023.07.06 -
[백준 1992번 C/C++] 쿼드트리
[백준 1992번 C/C++] 쿼드트리
2023.07.04 -
[백준 14891번 C/C++] 톱니바퀴
[백준 14891번 C/C++] 톱니바퀴
2023.07.03