PS

BOJ 2630 - 색종이 만들기

728x90

www.acmicpc.net/problem/2630

 

2630번: 색종이 만들기

첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다.

www.acmicpc.net

 

분할정복법(Divide and Conquer) 을 사용해 푸는 문제

(참조 : kimch3617.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B6%84%ED%95%A0%EC%A0%95%EB%B3%B5%EB%B2%95-Divide-and-Conquer)

 

 

- c++

#include <iostream>
#define MAX 128
 
using namespace std;
 
int adj[MAX][MAX];
int answer[2= {
    0,
};
int N;
 
void divide_and_conquer(int x, int y, int size) {
    for (int i = x; i < x + size; i++) {
        for (int j = y; j < y + size; j++) {
            if (adj[x][y] != adj[i][j]) {
                int s = size / 2;
                divide_and_conquer(x, y, s);
                divide_and_conquer(x + s, y, s);
                divide_and_conquer(x, y + s, s);
                divide_and_conquer(x + s, y + s, s);
                return;
            }
        }
    }
    answer[adj[x][y]]++;
}
 
int main() {
    cin.tie(0);
    ios_base::sync_with_stdio(0);
 
    cin >> N;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            cin >> adj[i][j];
        }
    }
 
    divide_and_conquer(00, N);
 
    cout << answer[0<< '\n';
    cout << answer[1<< '\n';
 
    return 0;
}
cs

 

 

 

 

코드 원 출처 : blog.naver.com/PostView.nhn?blogId=jqkt15&logNo=221943964277

 

[Boj 2630] 백준 - 색종이 만들기 (분할 정복, 재귀)

​https://www.acmicpc.net/problem/2630​목차 1. 풀이2. 소스코드​​​1. 풀이 (분할 정복, 재귀)​i) ...

blog.naver.com

 

 

 

 

728x90

'PS' 카테고리의 다른 글

BOJ 11585 - 속타는 저녁 메뉴  (0) 2020.09.14
BOJ 7569 - 토마토  (0) 2020.09.06
BOJ 11724 - 연결 요소의 갯수  (0) 2020.09.04
BOJ 1931 - 회의실 배정  (0) 2020.08.31
BOJ 11399 - ATM  (0) 2020.08.30