본문 바로가기
백준 문제풀이

[백준][재귀함수] 1780 종이의 개수 c++ 구현

by 꽁이꽁설꽁돌 2024. 6. 21.
728x90
반응형

목차

    https://www.acmicpc.net/problem/1780

    문제

     

    재귀에 대한 이해가 부족한 것 같아 풀어보았다.

    범위만 나누어서 재귀적으로 탐색하면 쉽게 풀리는 문제였다.

     

     

    코드 구현

    #include <iostream>
    #include<iostream>
    #include <vector>
    #include <algorithm>
    
    #include <queue>
    #include <stack>
    
    using namespace std;
    
    
    int arr[5000][5000];
    
    int a = 0;
    int b = 0;
    int c = 0;
    
    
    
    void Count(int row, int column, int n) {
    	int cnt1 = 0;
    	int cnt2 = 0;
    	int cnt3 = 0;
    
    	for (int i = row; i < row+n; i++) {
    		for (int j = column; j < column+n; j++) {
    			if (arr[i][j] == -1)
    				cnt1++;
    			if (arr[i][j] == 0)
    				cnt2++;
    			if (arr[i][j] == 1)
    				cnt3++;
    		}
    	}
    	if (cnt1 == n*n)
    		a++;
    	else if (cnt2 == n * n)
    		b++;
    	else if (cnt3 == n * n)
    		c++;
    	else
    	{
    		for (int i = row; i < row+n; i++) {
    			for (int j = column; j < column+n; j++) {
    				if (i % (n / 3) == 0 && j % (n / 3) == 0)
    					Count(i, j, n / 3);
    			}
    		}
    	}
    }
    
    int main() {
    	
    	int N;
    
    	cin >> N;
    
    	for (int i = 0; i < N; i++) {
    		for (int j = 0; j < N; j++) {
    			cin >> arr[i][j];
    		}
    	}
    	Count(0,0, N);
    	cout << a<<"\n";
    	cout << b << "\n";
    	cout << c << "\n";
    	
    }
    반응형