티스토리 뷰

오늘의 문제!

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

입력

첫째 줄에 N이 주어짐
둘째 줄부터 N개의 줄 동안 길이 N인 문자열이 들어옴

풀이

1번 (x0,y0)~(xi,yi) 까지 0 또는 1중 하나의 값으로 이루어 있는지 확인, 둘중 하나의 값으로 되어 있으면 해당 값 출력

2번 0과1로 섞여있을 경우는 좌상,우상,좌하,우하로 나누어 다시 1번 판별 이때 좌상 들어가기전 " ( " 출력 / 우하 끝나고 " ) " 출력

소스

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
42
43
44
45
46
47
48
 
#include <stdio.h>
#include <iostream>
using namespace std;
 
char map[65][65];
 
void calResult(int x0, int y0, int xi, int yi){
    char num = map[y0][x0];
    bool check = true;
    for(int y=y0;y<yi;y++){
        for(int x=x0;x<xi;x++){
            if(num != map[y][x]){
                check = false;
                break;
            }
        }
        if(!check){
            break;
        }
    }
    if(check){
        cout << num;
        return;
    }
    cout << "(";
    int L = (xi-x0)/2;
    calResult(x0+L*0, y0+L*0, x0+L*1, y0+L*1);
    calResult(x0+L*1, y0+L*0, x0+L*2, y0+L*1);
    calResult(x0+L*0, y0+L*1, x0+L*1, y0+L*2);
    calResult(x0+L*1, y0+L*1, x0+L*2, y0+L*2);
    cout << ")";
    return;
}
 
int main(void){
    int N;
    cin >> N;
    for(int y=0;y<N;y++){
        for(int x=0;x<N;x++){
            cin >> map[y][x];
        }
    }
    calResult(00, N, N);
    
    return 0;
}
 
cs
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
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
글 보관함