코드
function solution(arr) {
const count = [0, 0]
function divide(row, col, n) {
const target = arr[col][row];
const half = Math.floor(n/2);
for(let i=col; i<col+n; i++) {
for(let j=row; j<row+n; j++) {
if(arr[i][j] !== target) {
divide(row, col, half);
divide(row+n/2, col+n/2, half);
divide(row+n/2, col, half);
divide(row, col+n/2, half);
return;
}
}
}
count[target]++
}
divide(0, 0, arr.length)
return count;
}
설명
- 나는 5중 포문까지 갈 뻔한 거 정신줄 잡았는데 겁나 쉽게 푸네 이게 나라냐!!!!!!!!!
- 저는 처음에 0과 1 개수를 미리 구했는데 거기서만 시간 엄청 잡아먹더라구요
- 사각형 첫 index의 값을 target으로 잡아요
- 이후 half를 이용해 계산해야하니 미리 선언해둬요!
- 한 사각형의 행렬을 돌며 모두 같은 값인지 확인해요.
- 만약 같지 않으면 재귀함수를 돌리는데 그 사각형 내부리그는 n을 반토막 내줘야겠죠?
- 그리고 계속 돌면 안 되니, 한 번 돌고 return으로 함수를 탈출해줘요
- col과 row의 순서를 바꾸면 안 돼요!
- 행렬이라 그래서 항상 행 먼저 썼는데 컴퓨터에서는 col이 먼저에요
- 모두 같은 값이면 count[target]을 하나 올려줘요!