본문 바로가기
Algorithm/C++

[백준 1992] 쿼드트리

by imagineer_jinny 2022. 9. 10.

1992번: 쿼드트리 (acmicpc.net)

 

1992번: 쿼드트리

첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또

www.acmicpc.net

 

배운것

string으로 받고 다시 숫자로 바꿔주기

 for (int i = 0; i < N; i++) {
    string str;
    cin >> str;
    for (int j = 0; j < N; j++)
      arr[i][j] = str[j] - '0';
  }

이해 안되면 외우기

 solve(n / 2, y, x); //왼쪽 위
        solve(n / 2, y, x + n / 2); //오른쪽 위
        solve(n / 2, y + n / 2, x); //왼쪽 아래
        solve(n / 2, y + n / 2, x + n / 2); //오른쪽 아래

 

 

정답 코드

// Authored by : cpprhtn
// Co-authored by : -
// http://boj.kr/04267bd2251a41109700585bc73a6de2
#include <bits/stdc++.h>
using namespace std;

int N;
const int MAX = 64;
int arr[MAX][MAX];
void solve(int n, int y, int x)
{
  if (n == 1) {
    cout << arr[y][x];
    return;
  }
  bool zero = true, one = true;
  for (int i = y; i < y + n; i++)
    for (int j = x; j < x + n; j++)
      if (arr[i][j])
        zero = false;
      else
        one = false;
  if (zero)
    cout << 0;
  else if (one)
    cout << 1;
  else {
    cout << "(";
    solve(n / 2, y, x); //왼쪽 위
    solve(n / 2, y, x + n / 2); //오른쪽 위
    solve(n / 2, y + n / 2, x); //왼쪽 아래
    solve(n / 2, y + n / 2, x + n / 2); //오른쪽 아래
    cout << ")";
  }
  return;
}
int main(void)
{
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> N;
  for (int i = 0; i < N; i++) {
    string str;
    cin >> str;
    for (int j = 0; j < N; j++)
      arr[i][j] = str[j] - '0';
  }
  solve(N, 0, 0);
}

 

'Algorithm > C++' 카테고리의 다른 글

[백준 2206] 벽 부수고 이동하기  (0) 2022.09.14
[백준 11728] 배열 합치기  (0) 2022.09.13
[백준 2630] 색종이 만들기  (0) 2022.09.08
[백준 1780] 종이의 개수  (0) 2022.09.08
[백준 17478] 재귀함수가 뭔가요?  (0) 2022.09.07

댓글