본문 바로가기
카테고리 없음

[ 프로그래머스] 쿼드압축 후 개수 세기 - Java

by hoony__93 2021. 3. 12.
반응형
문제 링크

programmers.co.kr/learn/courses/30/lessons/68936

 

코딩테스트 연습 - 쿼드압축 후 개수 세기

[[1,1,0,0],[1,0,0,0],[1,0,0,1],[1,1,1,1]] [4,9] [[1,1,1,1,1,1,1,1],[0,1,1,1,1,1,1,1],[0,0,0,0,1,1,1,1],[0,1,0,0,1,1,1,1],[0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,1],[0,0,0,0,1,0,0,1],[0,0,0,0,1,1,1,1]] [10,15]

programmers.co.kr

문제 풀이

hoony-devblog.tistory.com/39

 

[ 백준 2630 ] 색종이 만들기 - Java

문제 링크 https://www.acmicpc.net/problem/2630 2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들..

hoony-devblog.tistory.com

제가 예전에 풀었던 색종이 만들기와 거의똑같은 문제였죠.

 

계속해서 4등분을해서 같은지 비교해가며 풀면 쉽게 풀어낼수 있습니다.

소스 코드
class Solution {
   public static int[] solution(int[][] arr) {
        int[] answer = new int [2];

        String ans = sol(arr, arr.length, 0, 0);
        for (char cha : ans.toCharArray()) answer[cha-'0']++;

        return answer;
    }

	static String sol(int [][] arr, int n , int x , int y) {

		if(test(arr, n, x, y)) {
			return arr[x][y]+"";
		}else {
			return sol(arr, n/2, x, y) +sol(arr, n/2, x, y+n/2) +sol(arr, n/2, x+n/2, y) +sol(arr, n/2, x+n/2, y+n/2);
		}

	}

	static boolean test(int [][] arr, int n , int x , int y) {
		for (int i = x; i < x+n; i++) {
			for (int j = y; j <  y+n; j++) {
				if(arr[x][y]!=arr[i][j]) return false;
			}
		}
		return true;
	}
}
반응형