티스토리 뷰

Algorithm/BOJ

백준 1780번 C++

poopooreum 2023. 7. 26. 07:41
반응형

백준 1780번 종이의 개수
https://www.acmicpc.net/problem/1780

1780번: 종이의 개수

N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수

www.acmicpc.net


정답 코드

#include <iostream>
using namespace std;

int board[2200][2200];
int mns = 0, zero = 0, one = 0;
int flag;

void divide(int x, int y, int n) {
		flag = board[x][y]; 
		bool check = true; 

		for (int i = x; i < x + n; i++) {
			for (int j = y; j < y + n; j++) {
				if (board[i][j] != flag) {
					check = false;
					break;	
				}
			}
		}

		if (check) {
			if (flag == -1) mns++;
			else if (flag == 0) zero++;
			else if (flag == 1) one++;
		}
		else {
			n = n / 3;
			divide(x, y, n);
			divide(x, y + n * 2, n);
			divide(x, y + n, n);

			divide(x + n * 2, y, n);
			divide(x + n * 2, y + n * 2, n);
			divide(x + n * 2, y + n, n);

			divide(x + n, y, n);
			divide(x + n, y + n * 2, n);
			divide(x + n, y + n, n);
		}
		return;
	}

int main() {
		int n;
		cin >> n;

		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				cin >> board[i][j];
			}
		}

		divide(0, 0, n);
		cout << mns << " " << zero << " " << one << endl;
		return 0;
}

반응형

'Algorithm > BOJ' 카테고리의 다른 글

백준 1822번 C++  (0) 2023.07.30
백준 1806번 C++  (0) 2023.07.30
백준 1764번 C++  (0) 2023.07.25
백준 1753번 C++  (0) 2023.07.25
백준 1748번 C++  (0) 2023.07.25
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함