[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;
}
};
};
#다른점
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 를 호출 하는 방식이였다.
처음에는 해맸지만... 다음에는 잘할수 있을거 같다.
글고 영어!! 공부좀 하기.. 매번 파파고 ㅎ^^
Author And Source
이 문제에 관하여([CODEWAR] Validate Sudoku with size `NxN`), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@daum081308/CODEWAR-Validate-Sudoku-with-size-NxN저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)