[백준/2630] 색종이 만들기 (실버 2) JAVA

jkky98·2024년 5월 18일
0

CodingTraining

목록 보기
38/61


1. 4조각으로 잘라서 Object배열에 int[][]로 넣어 리턴하는 메서드
2. 종이 이중배열이 1로만 차있는지, 0으로만 차있는지 1,0으로 차있는지 확인해서 0,1,2로 리턴 해주는 메서드

스택 자료구조로 process를 만들고 첫번째 종이를 넣는다. while을 통해 process에 이중배열이 아무것도 없다면 while이 끝난다.

while내부에서 스택에서 pop하여 종이를 꺼내 (2.)메서드로 체크하고 0이면 white++ 1이면 blue++ 2이면 (1.)메서드를 사용해서 Object배열을 얻고 배열에서 item들을 꺼내 process에 모두 push해준다.(반복)

import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static <T> void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int length = scanner.nextInt();

        int[][] matrix = new int[length][length];

        for (int i = 0; i < length; i++) {
            for (int j = 0; j < length; j++) {
                matrix[i][j] = scanner.nextInt();
            }
        }
        int blue = 0;
        int white = 0;
        Stack<int[][]> process = new Stack<>();
        process.push(matrix);

        while (!process.isEmpty()) {
            int[][] check_item = process.pop();
            int status = CheckMatrix(check_item);

            if (status == 2) {
                Object[] ProcessItems = DivideMatrix(check_item);
                for (Object item : ProcessItems) {
                    int[][] item1 = (int[][]) item;
                    process.push(item1);
                    }
                } else if (status == 1) {
                blue += 1;
            } else if (status == 0) {
                white += 1;
            }
        }
        System.out.println(white);
        System.out.println(blue);



        }
    public static Object[] DivideMatrix(int[][] matrix){
        int length = matrix.length / 2;
        int[][] topLeft = new int[length][length];
        int[][] topRight = new int[length][length];
        int[][] botLeft = new int[length][length];
        int[][] botRight = new int[length][length];

        for (int i=0; i<length; i++) {
            for (int j=0; j<length; j++) {
                topLeft[i][j] = matrix[i][j];
                topRight[i][j] = matrix[i][j+length];
                botLeft[i][j] = matrix[i+length][j];
                botRight[i][j] = matrix[i+length][j+length];
            }
        }
        return new Object[]{topLeft, topRight, botLeft, botRight};
    }
    public static int CheckMatrix(int[][] matrix) {
        int sum = 0;
        int fullOne = (int) Math.pow(matrix.length, 2);
        for (int[] i : matrix) {
            for (int j : i) {
                sum += j;
            }
        }

        if (sum == 0) {
            return 0;
        } else if(sum > 0 & sum < fullOne) {
            return 2;
        } else if(sum == fullOne) {
            return 1;
        } else {
            return 2;
        }
    }
}
profile
자바집사의 거북이 수련법

0개의 댓글