[BEAKJOON] 1992_쿼드트리_C언어

SW 업무 관련/백준

[BEAKJOON] 1992_쿼드트리_C언어

WillBe_ 2017. 8. 2. 22:36

https://www.acmicpc.net/problem/1992


풀이

음..설명하기가 어려운 문제같다.

우선 같은 숫자들로만 이루어져 있으면 해당 숫자만 출력을 해야된다. 혹시나 다른 숫자들이 섞여 있으면

왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래 구간을 나누어 같은 숫자들로만 이루어져 있으면 해당 숫자를 출력, 아니면 다시 구간을 나누어 위와 같은 순서를 반복한다.


여기서 구간으로 나누어 들어갈 때는 ()로 구간을 나누어주어야된다.



위의 구간을 보면 빨간 선으로 처음으로 구간을 나누고 다음으로 파란선 다음으로 검은선 이렇게 쪼개서 구간을 나누어 들어간다.


왜 저 입력이 (0(0011)(0(0111)01)1)인지는 설명하기 어려우니 패스하고 추가적으로 확인할만한 예제와 출력을 첨부합니다.





문제를 제대로 이해하지 못 하여...저는 위와같이 한 숫자로만 이루어져 있어도 (1)과 같이 무조건 ()를 출력하게 코드를 작성하여...100%에서 계속 틀렸습니다..ㅜ,ㅠ











제출한 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
 
int map[70][70],N;
 
void check(int y, int x, int divide)//y,x는 좌표, divide는 몇 분할인지
{
    //printf("\n\n1. y : %d   x : %d   divide : %d\n\n",y,x,divide);
    if (N/divide==0return;
    //printf("\n\n2. y : %d   x : %d   divide : %d\n\n", y, x, divide);
    int num=map[y][x],flag=0;//num 초기값, flag num과 같은 수들로만 이루어져 있는지 아닌지 판별.
    for (int i = y; i < y+(N / divide); i++)
    {
        for (int j = x; j < x+(N / divide); j++)
        {
            if (num != map[i][j]) {//구간에서 num과 다른 숫자가 나오면 다시 구간을 나누어 정복
                flag = 1;
                printf("("); 
                check(y, x,divide*2);//왼쪽 위
                check(y, x + N / (divide*2), divide*2);//오른쪽 위
                check(y + N / (divide * 2), x, divide*2);//왼쪽 아래
                check(y + N / (divide * 2), x + N / (divide * 2), divide*2);//오른쪽 아래
                printf(")");
                return;
            }
        }
    }
    if (flag == 0)printf("%d",num);
 
    return;
}
 
int main()
{
    scanf("%d",&N);
    for (int i = 1; i <= N; i++)
        for (int j = 1; j <= N; j++)
            scanf("%1d"&map[i][j]);
    
    check(111);
    return 0;
}
cs


'SW 업무 관련 > 백준' 카테고리의 다른 글

[BEAKJOON] 3055_탈출_C언어  (0) 2017.08.07
[BEAKJOON] 9935_문자열폭발_C언어  (0) 2017.08.04
[BAEKJOON] 2089_-2진수_C언어  (0) 2017.08.01
[BAEKJOON] 1107_리모컨_C언어  (1) 2017.08.01
[BAEKJOON] 1697_숨바꼭질_C언어  (418) 2017.08.01