[백준] 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
  • 전체
    오늘
    어제
    • 분류 전체보기 (343)
      • 프로그래밍언어론 정리 (5)
      • 컴퓨터네트워크 정리 (5)
      • 알고리즘&자료구조 공부 (64)
        • it 취업을 위한 알고리즘 문제풀이 입문 강의 (60)
        • 학교 알고리즘 수업 (3)
        • 실전프로젝트I (0)
      • 백준 문제 (196)
        • 이분탐색 (7)
        • 투포인트 (10)
        • 그래프 (7)
        • 그리디 (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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바