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;
}
}
}
'Programmers' 카테고리의 다른 글
[프로그래머스][JAVA]Lv. 2 - 순위 검색 (0) | 2023.10.09 |
---|---|
[프로그래머스][JAVA]Lv. 2 - 이진 변환 반복하기 (1) | 2023.09.25 |
[프로그래머스][JAVA]Lv. 2 - 튜플 (0) | 2023.09.25 |
[프로그래머스][JAVA]Lv. 2 - 멀쩡한 사각형 (0) | 2023.09.25 |
[프로그래머스][JAVA]Lv. 2 - 괄호 변환 (0) | 2023.09.25 |