본문 바로가기
알고리즘/백준

백준 1992. 쿼드트리

by kastori 2021. 12. 22.
반응형

문제

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

 

1992번: 쿼드트리

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

www.acmicpc.net

문제풀이

 구역을 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래 순으로 탐색을 하면서 그 구역이 0이나 1로 되어 있거나 사이즈가 1일 때 탐색을 그만하고 0이나 1을 출력하는 문제였다. 
 구역탐색을 재귀형식으로 시작 행과 시작 열, 사이즈를 받아 탐색을 하는 함수를 만들고, 구역 내에 전부 0이나 1인지 검사하는 check함수를 만들어 사이즈가 1이거나 check함수가 true면 종료하게 만들었다.
 각 레벨에서 여는 괄호로 시작하고, 해당 레벨이 끝나면 괄호를 닫아준다.

소스코드(Java)

더보기
더보기
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class baek1992{
    static char[][] map;
    static int N;
    static StringBuilder answer = new StringBuilder();
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        map = new char[N][];
        for (int i = 0; i < N; i++) {
            map[i] = br.readLine().toCharArray();
        }

        dfs(0, 0, N);
        System.out.println(answer.toString());

    }

    static void dfs(int sr, int sc, int size) {
        if (size == 1 || check(sr, sc, size)) {
            answer.append(map[sr][sc]);
            return;
        }
        size /=2;
        answer.append("(");
        dfs(sr , sc , size);
        dfs(sr , sc + size, size);
        dfs(sr + size, sc, size );
        dfs(sr + size, sc + size, size);
        answer.append(")");

    }

    private static boolean check(int sr, int sc, int size) {
        char ch = map[sr][sc];
        for (int r = sr; r < sr + size; r++) {
            for (int c = sc; c < sc + size; c++) {
                if (ch != map[r][c]) {
                    return false;
                }
            }
        }
        return true;
    }

}

 

반응형

'알고리즘 > 백준' 카테고리의 다른 글

백준 1863. 스카이라인 쉬운거  (0) 2021.12.24
백준 18116. 로봇 조립  (0) 2021.12.23
백준 16562. 친구비  (0) 2021.12.21
백준 17836. 공주님을 구해라!  (0) 2021.12.20
백준 19598. 최소 회의실 개수  (0) 2021.12.20

댓글