https://school.programmers.co.kr/learn/courses/30/lessons/68936
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
접근방법
- 현재 범위에서 조건에 따라 4등분하고 다시 검사하는 반복적인 함수 호출이 일어난다 -> 재귀가 적절해보임
- 배열을 넘겨서 해당 배열의 원소가 모두 같으면 class 변수인 ans에 기록한다.
- 같지 않으면 4등분한 배열을 재귀적으로 다시 검사한다.
- 길이가 1이되면 모두 같을 수 밖에 없다.
코드
class Solution {
int[] ans = new int[2];
public int[] solution(int[][] arr) {
recur(arr);
return ans;
}
void recur(int[][] arr){
int num = getNum(arr);
if(num >= 0){
ans[num]++;
return;
}
int size = arr.length;
recur(copy(arr, 0,0));
recur(copy(arr, 0,size/2));
recur(copy(arr, size/2,size/2));
recur(copy(arr, size/2,0));
}
int[][] copy(int[][] arr,int sr,int sc){
int size = arr.length/2;
int[][] copyArr = new int[size][size];
for(int i = 0 ; i < size ; i++){
for(int j = 0 ; j < size; j++){
copyArr[i][j] = arr[i+sr][j+sc];
}
}
return copyArr;
}
int getNum(int[][] arr){
int num = arr[0][0];
int size = arr.length;
for(int i = 0; i < size; i++){
for(int j = 0; j < size ; j++){
if(num != arr[i][j]) return -1;
}
}
return num;
}
}
'Algorithm' 카테고리의 다른 글
[프로그래머스] LV 3 불량사용자 (0) | 2024.10.28 |
---|---|
[프로그래머스] LV 2 마법의 엘리베이터 (0) | 2024.10.26 |
[프로그래머스] LV 3 스티커 모으기(2) (2) | 2024.10.26 |
[프로그래머스] LV 2 두 큐 합 같게 만들기 (0) | 2024.10.26 |
[프로그래머스] LV 3 기지국 설치 (2) | 2024.10.24 |