백준 1992 쿼드트리(JAVA)

2024. 8. 4. 21:07·PS(Problem Solving)/JAVA

문제 설명

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

 

풀이과정

위 사진처럼 압축하는 문제이다. 먼저 압축이 가능한지 판단하는 함수를 정의하고, 재귀를 통해서 문제를 해결했다.

 

정답코드

import java.io.*;
import java.util.*;

public class Main {
    static int[][] board;
    static int N;
    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        N = Integer.parseInt(br.readLine());
        board = new int[N][N];

        for (int i = 0; i < N; i++) {
            String input = br.readLine();
            for (int j = 0; j < N; j++) {
                board[i][j] = input.charAt(j) - '0';
            }
        }

        quadTree(0, 0, N);

        bw.write(sb.toString());
        bw.flush();
    }

    public static boolean isCompress(int y, int x, int size) {
        if (size == 1) {
            return true;
        }

        int num = board[y][x];

        for (int i = y; i < y + size; i++) {
            for (int j = x; j < x + size; j++) {
                if (board[i][j] != num) {
                    return false;
                }
            }
        }

        return true;
    }

    public static void quadTree(int y, int x, int size) {
        if (isCompress(y, x, size)) {
            sb.append(board[y][x]);
        } else {
            sb.append("(");
            quadTree(y, x, size / 2); // 왼쪽 위
            quadTree(y, x + size / 2, size / 2); // 오른쪽 위
            quadTree(y + size / 2, x, size / 2); // 왼쪽 아래
            quadTree(y + size / 2, x + size / 2, size / 2); // 오른쪽 아래
            sb.append(")");
        }
    }

}
저작자표시 비영리 변경금지 (새창열림)
'PS(Problem Solving)/JAVA' 카테고리의 다른 글
  • 백준 2910 빈도 정렬(JAVA)
  • 백준 2828 사과 담기 게임(JAVA)
  • 백준 2583 영역 구하기(JAVA)
  • 백준 2468 안전 영역(JAVA)
SiwonHae
SiwonHae
프로그래밍을 공부하고 있는 학생입니다.
  • SiwonHae
    시원해의 블로그
    SiwonHae
  • 전체
    오늘
    어제
    • 전체보기 (150)
      • PS(Problem Solving) (95)
        • C (25)
        • C++ (33)
        • JAVA (37)
      • Algorithm & Data Structure (13)
      • Computer Science (12)
        • Network (2)
        • Design Pattern (10)
      • Back-end (6)
        • Spring (5)
      • Front-end (1)
        • React (1)
      • JAVA (4)
      • 정보처리기사 (17)
      • SQLD (2)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
SiwonHae
백준 1992 쿼드트리(JAVA)
상단으로

티스토리툴바