[CODEWAR] Validate Sudoku with size `NxN`

https://www.codewars.com/kata/540afbe2dc9f615d5e000425
지금까지 푼 문제 정리예정

&4kyu 문제

스도쿠 문제

설명
<가로 세로 중에 중복 안되고 하나씩 나열 되야 된다. >
< 대각선은 생각 x >
!! < 9줄인 스도쿠 를 3 개씩 자르면 >
[ 7 8 4][ 5 3 9]
[6 1 2]
가나오는데 여기 3 줄에서 1 2 3 4 5 6 7 8 9 가 있는가?
< 이부분에서 헷갈림

풀이

처음에는 배열 형식으로 [ 1 2 3 4 5 6 7 8 9] 를 만든후 하나씩 뺀다음
이 배열의 길이가 0 이 되는가 ( 즉 비어있는가 ) 를 할려고 했는데
splice 를 사용해서 assign 복사 하는 과정이 너무 복잡해서
다른 방법을 생각해 보자 한게 sum 해서 45 가 되면 true 아니면 false 를
내보내는 방식으로 생각
<3 개씩 자르는 부분이 어려웠다 > 아무래도 재귀를 사용해서 해야 시간적 여유가 있는데
재귀는 너무 복잡하고 생각이 안나서 오랜만에 for for for 문을 사용해서 돌리게 됬다.

--> 핵심 위에서 부터 3개 씩 자르고 ( slice 함수를 사용해서 복사한다는 뜻 )
거기서 for 문을 돌려보자 가 핵심이였다.
조금 어려웠지만 그래도 풀었다.

해답


const total_sum = function (arr) {

  var sum = 0;
  for (var i = 0; i < arr.length; i++) {
    sum += arr[i];

  }
  return sum;

}
const check = function (arr) {
  var pu = 0;
  for (var i = 0; i < arr; i++) {
    pu += i + 1;


  }
  return pu;


}

var Sudoku = function(arr) 
{
  console.log(arr)
 
  
  //   Private methods
  // -------------------------
  var hey = arr.length;
  const check_arr = check(hey);


  for (var i = 0; i < hey; i++) {
    var ceck = arr[i];


    var syn_fi = 0;
    var syn_se = 0;

    for (var cc = 0; cc < hey; cc++) {
    > 여기는 가로 세로 맞춰보는 방법<
    
      var hey_arr = ceck[cc];
      var simple = arr[cc][i];
      //console.log(simple)
     
    if (typeof (hey_arr) == 'number' || typeof (simple) == 'number') {
        syn_fi += hey_arr;
        syn_se += simple;
      }


    }
 > type에러 나면 바로 flalse 로 
    //console.log(syn_se, syn_fi);
    if (syn_fi != check_arr || syn_se != check_arr) {
     return {
    isValid: function() {
      // YOUR SOLUTION
      console.log(false)
      return false;
    }
  };
      

    }

  }
 var check_snall = Math.sqrt(hey);
  var cgec = check(hey);
> 여기 부분이  3 개씩 잘라서 맞춰보는 그것!!<
  for (var i = 0; i < check_snall; i++) {
    var cec = arr.slice(check_snall * i, check_snall * i + check_snall);
    console.log(cec)
    for (var zzzz = 0; zzzz < check_snall; zzzz++) {
      var sum_titka = 0;

      for (var zz = 0; zz < check_snall; zz++) {
        var nn = cec[zz].slice(check_snall * zzzz, check_snall * zzzz + check_snall);
        var total_misu = total_sum(nn);
        sum_titka += total_misu;
      }
      console.log(sum_titka)
    }
    if (sum_titka != cgec) {
      return {
        isValid: function () {
          // YOUR SOLUTION
          console.log('실패')
          return false;
        }
      };
    }

  }




  //   Public methods
  // -------------------------
  return {
    isValid: function() {
      // YOUR SOLUTION
     console.log(true)
      return true;
    }
  };
};

#다른점

원래는 true false 를 리턴 형식으로 바로 보냈는데
이번엔 return 하면서 객체 형식인 isvaild 를 호출 하는 방식이였다.
처음에는 해맸지만... 다음에는 잘할수 있을거 같다.

글고 영어!! 공부좀 하기.. 매번 파파고 ㅎ^^

좋은 웹페이지 즐겨찾기