[백준] 1992번 쿼드트리

2025. 1. 22. 18:32·백준 문제/재귀

문제: 1992번: 쿼드트리

basic-algo-lecture/workbook/0x0B.md at master · encrypted-def/basic-algo-lecture

 

basic-algo-lecture/workbook/0x0B.md at master · encrypted-def/basic-algo-lecture

바킹독의 실전 알고리즘 강의 자료. Contribute to encrypted-def/basic-algo-lecture development by creating an account on GitHub.

github.com

 

#include <map>
#include <set>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include <iomanip> // setprecision을 사용하기 위한 헤더
#include <climits>
#include <list>

using namespace std;

void Count(int n, int x, int y, vector<vector<char>>& board) {
    int tmpZero = 0;

    for (int i = x; i < x + n; i++) {
        for (int j = y; j < y + n; j++) {
            if (board[i][j] == '0')
                tmpZero++;
        }
    }

    // 한 가지 숫자로만 이루어진 경우는 그냥 출력
    if (tmpZero == 0)
        cout << 1;
    else if (tmpZero == n * n)
        cout << 0;
    else {
        // 한 가지 숫자로 이루어지지 않은 경우는 4분할 해야함
        cout << "(";

        int half = n / 2;
        Count(half, x, y, board);
        Count(half, x, y + half, board);
        Count(half, x + half, y, board);
        Count(half, x + half, y + half, board);

        cout << ")";
    }
    return;
}


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

    int n;
    cin >> n;
    vector<vector<char>> board(n);
    for (int i = 0; i < n; i++) {
        board[i] = vector<char>(n);
        string input;
        cin >> input;

        for (int j=0; j<n; j++) {
            board[i][j] = input[j];
        }
    }
    Count(n, 0, 0, board);


    return 0;
}

 

음.. 이 문제도 2630번 색종이 만들기 문제랑 딱히 다를 바가 없었다.

 

다른 점이라고 하면 2630번은 각 색종이의 개수를 출력하는 거고 이 문제는 각 단계의 색종이의 번호를 출력하는 것?

 

코드 상에서는 진짜 달라진 부분이 거의 없다. 일단 Count 메서드에 진입하면 색종이를 확인해서 모두 같은 번호로 되어 있는지 확인하고 맞다면 색종이의 번호를 출력, 아니라면 4분할 하면 된다.

 

4분할 하기 전에 ( 를 출력해주고 분할을 끝마치면 ) 을 출력해주면 쉽게 문제를 해결할 수 있다.

 

 

 

참고자료:

[바킹독의 실전 알고리즘] 0x0B강 - 재귀 - YouTube

 

 

 

'백준 문제/재귀' 카테고리의 다른 글
  • [백준] 2448번 별 찍기 - 11
  • [백준] 2447번 별 찍기 - 10
  • [백준] 1780번 종이의 개수
  • [백준] 2630번 색종이 만들기
dubu0721
dubu0721
dubu0721 님의 블로그 입니다.
  • dubu0721
    dubu0721 님의 블로그
    dubu0721
  • 전체
    오늘
    어제
    • 분류 전체보기 (347) N
      • 프로그래밍언어론 정리 (5)
      • 컴퓨터네트워크 정리 (5)
      • 알고리즘&자료구조 공부 (64)
        • it 취업을 위한 알고리즘 문제풀이 입문 강의 (60)
        • 학교 알고리즘 수업 (3)
        • 실전프로젝트I (0)
      • 백준 문제 (200) N
        • 이분탐색 (7)
        • 투포인트 (10)
        • 그래프 (11) N
        • 그리디 (24)
        • DP (25)
        • BFS (18)
        • MST (7)
        • KMP (4)
        • Dijkstra (3)
        • Disjoints Set (4)
        • Bellman-Ford (2)
        • 시뮬레이션 (3)
        • 백트래킹 (15)
        • 위상정렬 (5)
        • 자료구조 (25)
        • 기하학 (1)
        • 정렬 (11)
        • 구현 (8)
        • 재귀 (8)
        • 수학 (8)
      • 유니티 공부 (11)
        • 레트로의 유니티 게임 프로그래밍 에센스 (11)
        • 유니티 스터디 자료 (0)
        • C# 공부 (0)
      • 유니티 프로젝트 (48)
        • 케이크게임 (13)
        • 점토게임 (35)
      • 언리얼 공부 (10)
        • 이득우의 언리얼 프로그래밍 (10)
      • 진로 (1)
      • 논문 읽기 (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    유니티
    그리디
    오블완
    이분탐색
    백트래킹
    dp
    골드메탈
    그래프
    정렬
    큐
    시뮬레이션
    티스토리챌린지
    수학
    투포인터
    해시
    바킹독
    이득우
    백준
    유니티 프로젝트
    맵
    언리얼
    BFS
    이벤트 트리거
    우선순위큐
    스택
    자료구조
    레트로의 유니티 프로그래밍
    재귀
    유니티 공부 정리
    C#
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dubu0721
[백준] 1992번 쿼드트리
상단으로

티스토리툴바