본문 바로가기

코딩테스트 문제풀이

[프로그래머스, javascript]쿼드 압축 후 개수 세기

function fnA(arr, lx, ly, rx, ry, t){
  let el = arr[ly][lx]
  for(let i=ly; i<ry; i++){
    for(let j=lx; j<rx; j++){
      if(el != arr[i][j]){
        return (
              fnA(arr, lx, ly, parseInt((lx+rx)/2), parseInt((ly+ry)/2),t) + 
              fnA(arr, parseInt((lx+rx)/2), ly, rx, parseInt((ly+ry)/2),t) + 
              fnA(arr, lx, parseInt((ly+ry)/2), parseInt((lx+rx)/2), ry,t) + 
              fnA(arr, parseInt((lx+rx)/2), parseInt((ly+ry)/2), rx, ry,t)
        )
      }
    }
  }

  return !el^t
}

function solution(arr) {
  var answer = [fnA(arr, 0, 0, arr.length, arr.length, 0),
                fnA(arr, 0, 0, arr.length, arr.length, 1 )];
  return answer;
}

재귀함수로 풀어내었다.

해당 문제 해결 방법 그대로 적용시켜 풀어내었다. 

좀 아쉬운 부분은 fnA 함수를 두 번 호출하였다는 점이 아쉽다. 한 번에 하는 방법이 있을 것 같은데 해결방안이 생각나질 않네.