본문 바로가기

Programmers

[프로그래머스][JAVA]Lv. 2 - 쿼드압축 후 개수 세기

https://school.programmers.co.kr/learn/courses/30/lessons/68936

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

public int func3(int[][] arr, int n, int m, int l) {
        int target = arr[n][m];
        for (int i = n; i < n + l; i++) {
            for (int j = m; j < m + l; j++) {
                if (arr[i][j] != target) {
                    return 2;
                }
            }
        }
        
        if (target == 0) {
            return 0;
        } else {
            return 1;
        }
        
    }

func3에서 처음 target과 같은지를 전체적으로 찾아서 다르다면 2를, 전부 같다면 처음이 0이면 0을, 1이면 1을 리턴

if (result == 0) {
    zero++;
    return;
} else if (result == 1) {
    one++;
    return;
}

리턴값이 0이면 zero를 증가, 1이면 one을 증가 후 리턴

2인 경우에는 그대로 func2를 실행

public void func2(int[][] arr, int n, int m, int l) {
    int half = l/2;
    func(arr, n, m, half);
    func(arr, n, m + half, half);
    func(arr, n + half, m, half);
    func(arr, n + half, m + half, half);
}

현재 사각형을 4등분하여 각각 다시 처음부터 체크

class Solution {
    static int one = 0;
    static int zero = 0;
    public int[] solution(int[][] arr) {
        func(arr, 0, 0, arr.length);
        return new int[]{zero, one};
    }

    public void func(int[][] arr, int n, int m, int l) {
        int result = func3(arr, n, m, l);
        if (result == 0) {
            zero++;
            return;
        } else if (result == 1) {
            one++;
            return;
        }
        
        func2(arr, n, m, l);
    }
    
    public void func2(int[][] arr, int n, int m, int l) {
        int half = l/2;
        func(arr, n, m, half);
        func(arr, n, m + half, half);
        func(arr, n + half, m, half);
        func(arr, n + half, m + half, half);
    }

    public int func3(int[][] arr, int n, int m, int l) {
        int target = arr[n][m];
        for (int i = n; i < n + l; i++) {
            for (int j = m; j < m + l; j++) {
                if (arr[i][j] != target) {
                    return 2;
                }
            }
        }
        
        if (target == 0) {
            return 0;
        } else {
            return 1;
        }
        
    }
}