BOJ 1780 종이의 개수

2020. 9. 18. 16:39·알고리즘/BOJ

www.acmicpc.net/problem/1780

 

1780번: 종이의 개수

N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1의 세 값 중 하나가 저장되어 있다. 우리는 이 행렬을 적절한 크기로 자르려고 하는데, 이때 다음의 규칙에 따라 자르려고 한다.

www.acmicpc.net

마찬가지로 분할 정복 문제이다.

쿼드 트리 문제와 비슷한데 분할해야 하는 구간만 늘었을 뿐이다.

#include <iostream>
#include <vector>
using namespace std;

int mi, ze, pl;
vector<vector<int>> ar;

void f(int x, int y, int n) {
	int tmp = ar[x][y];
	int mod = n / 3;
	int mod2 = mod * 2;
	for (int i = x; i < x + n; i++) {
		for (int j = y; j < y + n; j++) {
			if (tmp != ar[i][j]) {
				f(x, y, mod);
				f(x, y + mod, mod);
				f(x, y + mod2, mod);

				f(x + mod, y, mod);
				f(x + mod, y + mod, mod);
				f(x + mod, y + mod2, mod);

				f(x + mod2, y, mod);
				f(x + mod2, y + mod, mod);
				f(x + mod2, y + mod2, mod);
				return;
			}
		}
	}
	if (tmp == -1) mi++;
	else if (tmp == 0) ze++;
	else pl++;
}

int main() {
	ios::sync_with_stdio(false); cin.tie(0);

	int n;
	cin >> n;
	ar.resize(n, vector<int>(n));

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

	f(0, 0, n);
	
	cout << mi << endl;
	cout << ze << endl;
	cout << pl << endl;

	return 0;
}

각각에 대해서 

1 2 3

4 5 6

7 8 9

라고 할때

f(x, y, mod);
f(x, y + mod, mod);
f(x, y + mod2, mod);

f(x + mod, y, mod);
f(x + mod, y + mod, mod);
f(x + mod, y + mod2, mod);

f(x + mod2, y, mod);
f(x + mod2, y + mod, mod);
f(x + mod2, y + mod2, mod);

이렇게 접근해주면 된다.

'알고리즘 > BOJ' 카테고리의 다른 글

BOJ 2749 피보나치 수 3  (0) 2020.09.18
백준 9471 피사노 주기  (0) 2020.09.18
BOJ 1992 쿼드트리  (0) 2020.09.18
BOJ 10830 행렬 제곱  (0) 2020.09.16
BOJ 2343 기타 레슨  (0) 2020.09.15
'알고리즘/BOJ' 카테고리의 다른 글
  • BOJ 2749 피보나치 수 3
  • 백준 9471 피사노 주기
  • BOJ 1992 쿼드트리
  • BOJ 10830 행렬 제곱
khyu2
khyu2
  • khyu2
    dev log
    khyu2
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘
        • BOJ
        • Programmers
        • Algorithm
        • SWEA
      • 개발
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    분할 정복
    구현
    시뮬레이션
    코딩테스트 연습
    이분 탐색
    dp
    다익스트라
    알고리즘
    MST
    크루스칼
    냅색
    완전탐색
    dfs
    소수
    SWEA
    큐
    GREEDY
    완전 탐색
    트리
    프로그래머스
    피보나치 수
    우선순위 큐
    유니온 파인드
    BOJ
    이분탐색
    조합
    BFS
    행렬 제곱
    팰린드롬
    피사노 주기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
khyu2
BOJ 1780 종이의 개수
상단으로

티스토리툴바