ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 1780번 : 종이의 개수
    알고리즘 공부 2020. 3. 27. 21:29

      백준 2630번 : 색종이 만들기 문제의 상위 버전....이라고 하기에도 약간 부끄러운 그냥 숫자만 바꾼 문제다. 그래서 2630번의 풀이 방법을 그대로 이용했다. (2630번 풀이 : https://stillchobo.tistory.com/72) 다른 점이라면 4등분 하던 것을 9등분 했을 뿐! 그래서 설정한 영역에서 하나라도 다른 것이 발견되면 영역과 범위를 새로 지정한 함수를 9번 불러준다.

      사실 이렇게 무식하게 해도 되나 싶긴하다. check 함수를 9번이나 부르다니....ㅋㅋㅋ 하지만 굳이 저걸 이중 for문을 이용해서 적는 것도 실수할 구석이 많으니까 그냥 9번 쌩으로 적었다.

     

    #include <iostream>
    #include <stdio.h>
    
    using namespace std;
    
    int n;
    int arr[2187][2187];
    int ans[3];
    
    void check(int size, int startX, int startY)
    {
        int target = arr[startX][startY];
        
        for(int x = startX; x < startX + size; x++)
        {
            for(int y = startY; y < startY + size; y++)
            {
                if(arr[x][y] != target)
                {
                    int d = size / 3;
                    check(d, startX, startY);
                    check(d, startX + d, startY);
                    check(d, startX + 2 * d, startY);
                    check(d, startX, startY + d);
                    check(d, startX + d, startY + d);
                    check(d, startX + 2 * d, startY + d);
                    check(d, startX, startY + 2 * d);
                    check(d, startX + d, startY + 2 * d);
                    check(d, startX + 2 * d, startY + 2 * d);
                    
                    return;
                }
            }
        }
        
        if(target == -1) ans[0]++;
        else if(target == 0) ans[1]++;
        else if(target == 1) ans[2]++;
    }
    
    int main()
    {
        cin >> n;
        
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < n ; j++)
            {
                cin >> arr[i][j];
            }
        }
        
        check(n, 0, 0);
        
        cout << ans[0] << "\n" << ans[1] << "\n" << ans[2];
    }

    '알고리즘 공부' 카테고리의 다른 글

    백준 1699번 : 제곱수의 합  (0) 2020.03.30
    백준 9471번 : 피사노 주기  (0) 2020.03.29
    백준 1629번 : 곱셈  (0) 2020.03.27
    백준 1992번 : 쿼드트리  (0) 2020.03.26
    백준 2630번 : 색종이 만들기  (0) 2020.03.26
Designed by Tistory.