https://school.programmers.co.kr/learn/courses/30/lessons/68936
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
분할정복 알고리즘을 사용했다.
코드
class Solution {
static int oneCnt = 0;
static int zeroCnt = 0;
public int[] solution(int[][] arr) {
divideConquer(0, 0, arr.length, arr);
int[] answer = {zeroCnt, oneCnt};
return answer;
}
static void divideConquer(int r, int c, int size, int[][] arr) {
int num = arr[r][c];
boolean flag = true;
for (int i = r; i < r + size; i++) {
for (int j = c; j < c + size; j++) {
if (arr[i][j] != num) {
flag = false;
break;
}
}
if (!flag) break;
}
if (flag) {
if (num == 1) oneCnt++;
else zeroCnt++;
}
else {
divideConquer(r, c, size/2, arr);
divideConquer(r, c + size/2, size/2, arr);
divideConquer(r+ size/2, c, size/2, arr);
divideConquer(r+ size/2, c+ size/2, size/2, arr);
}
}
}
728x90
'Algorithm 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.1 : 체육복 - 자바[Java] (0) | 2023.09.30 |
---|---|
[프로그래머스] Lv.1 : 실패율 - 자바[Java] (0) | 2023.09.30 |
[프로그래머스] Lv.2 : 택배상자 - 자바[Java] (0) | 2023.09.07 |
[프로그래머스] Lv.2 : 롤케이크 자르기 - 자바[Java] (0) | 2023.09.07 |
[프로그래머스] Lv.2 : k진수에서 소수 개수 구하기 - 자바[Java] (0) | 2023.09.06 |