[C#] 쿼드압축 후 개수 세기

소슬잎·2023년 10월 28일

프로그래머스 문제

https://school.programmers.co.kr/learn/courses/30/lessons/68936

풀이 후기

1. 재귀재귀

설명만 봐도 재귀라서 이상한 생각은 안했다.

using System;
using System.Collections.Generic;
using System.Linq;

public class Solution
{
    private List<int> answer = new List<int>(); 
    
    public void Zip(int[,] arr, int x, int y, int len)
    {
        if (len == 1)
        {
            answer.Add(arr[x, y]);
            return;
        }

        int num = arr[x, y];
        for (int i = x; i < x + len; i++)
        {
            for (int j = y; j < y + len; j++)
            {
                if (arr[i, j] != num)
                {
                    int newLen = len / 2;
                    Zip(arr, x, y, newLen);
                    Zip(arr, x, y + newLen, newLen);
                    Zip(arr, x + newLen, y, newLen);
                    Zip(arr, x + newLen, y+ newLen, newLen);
                    return;
                }
            }
        }

        answer.Add(num);
    }

    public int[] solution(int[,] arr) {
        Zip(arr, 0, 0, arr.GetLength(0));
        return new int[] {answer.Count(i => i == 0), answer.Count(i => i == 1)};
    }
}

그냥 마음 가는대로 짰음.

profile
그냥 바보

0개의 댓글