728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/68936
public class Solution {
int[] answer = new int[] {0, 0};
public int[] solution(int[,] arr) {
QuadtreeCompress(arr, 0, 0, arr.GetLength(0));
return answer;
}
void QuadtreeCompress(int[,] arr, int x_S, int y_S, int length)
{
bool zero = true, one = true;
for (int i = x_S; i < x_S + length; i++)
for (int j = y_S; j < y_S + length; j++)
{
if (arr[i, j] == 0) one = false;
if (arr[i, j] == 1) zero = false;
}
if (zero)
answer[0] += 1;
if (one)
answer[1] += 1;
if (zero || one)
return;
QuadtreeCompress (arr, x_S, y_S, length / 2);
QuadtreeCompress (arr, x_S, y_S + length / 2, length / 2);
QuadtreeCompress (arr, x_S + length / 2, y_S, length / 2);
QuadtreeCompress (arr, x_S + length / 2, y_S + length / 2, length / 2);
}
}
배열 잘 들고 와서 0이나 1만 존재하는지 확인 후 0이나 1만 존재하면 값을 더하고 return,
0과 1이 공존하면 4분할 해주면 된다.
(4분할의 경우 재귀 함수를 사용하면 되고 이중 for문을 구성할 때 각 범위를 잘 찾을 수 있도록만)
* 핵심은 재귀 함수(범위는 어차피 반씩 줄어드니까 반씩 줄이면 되고),
분할을 했을 때의 범위를 이쁘게 찾도록 설정(시작 index가 반으로 나눈 length의 +방향일 경우 기존 length로만 주어지면 당연히 안되고 기존 범위에 + 해야 함)
반응형
'프로그래머스_C# > Level_2' 카테고리의 다른 글
[프로그래머스 C#] 점프와 순간 이동 (0) | 2021.11.11 |
---|---|
[프로그래머스 C#] n^2 배열 자르기 (0) | 2021.11.10 |
[프로그래머스 C#] 스킬트리 (0) | 2021.11.04 |
[프로그래머스 C#] 방문 길이 (0) | 2021.11.03 |
[프로그래머스 C#] 올바른 괄호 (0) | 2021.11.02 |