Lv.2 쿼드압축 후 개수 세기

🤖문제

👍🏻 2022년 2월 6일

처음 코드

<script>
  function solution(arr) {
      var answer = [0,0];

      const quad = (arr) => {
          if (arr.length === 1) return answer[arr[0][0]]++;
          let initialNum = arr[0][0];
          
          // 전부 0인지 1인지 구하는 부분 (밑에서 수정)
          let same = true;
          for(let i=0; i<arr.length; i++) {
              if (!same) break;
              for (let j=0; j<arr.length; j++) {
                  if (arr[i][j] !== initialNum) {
                      same = false;
                      break;
                  } 
              }
          }
          if (same) return answer[arr[0][0]]++;

          let q1 = arr.splice(0, arr.length/2);  
          let q2 = q1.map(v => v.splice(v.length/2, v.length));
          let q3 = arr;
          let q4 = q3.map(v => v.splice(v.length/2, v.length));
          quad(q1);
          quad(q2);
          quad(q3);
          quad(q4); 
      }
      quad(arr);
      return answer;
  }
</script>

every 써서 전부 0인지 1인지 판별

<script>
  let allZero, allOne;
  allZero = arr.every((row) => row.every(v => v===0));
  allOne = arr.every((row) => row.every(v => v===1));
  if (allZero || allOne) same = true;
</script>

풀기 전에 겁부터 먹었던 재귀함수였는데 오늘 사알짝 감을 잡았다. 🙂
every나 some같은 js 기본 함수들을 자주 사용하면서 익숙해져야겠다고 느꼈다.

좋은 웹페이지 즐겨찾기