[21/08/13 KATA NINJA] n진수 게임 & 후보키

NinjaJuunzzi·2021년 8월 13일
0

코드카타

목록 보기
13/36
post-thumbnail

n진수 게임


function solution(n, t, m, p) {
  let answer = "";
  let check = 0;
  while (answer.length < m * t) 
      answer+=(check++).toString(n);

  return answer
    .split("")
    .filter((chr, index) => index < m * t && index % m === p - 1)
    .join("").toUpperCase();
}
function getJinBeopNumber(n, number) {
  if (number === 0) return "0";
  let str = "";
  while (number !== 0) {
    str += `${
      number % n >= 10 ? String.fromCharCode(55 + (number % n)) : number % n
    }`;
    number = Math.floor(number / n);
  }
  return str.split("").reverse().join("");
  // return array.reverse().join("");
}
function solution(n, t, m, p) {
  let answer = "";
  let check = 0;
  // console.log(check.toString(7));
  while (answer.length <= m * t) answer += getJinBeopNumber(n, check++);
  return answer
    .split("")
    .filter((chr, index) => index % m === p - 1)
    .slice(0, t)
    .join("");
}
  • 진법 변환은 (check++).toString(n); 로 하면됨. n진법의 정수로 바뀜.

후보키

  • 배열을 비교하는 여러가지 방법
  1. combi.every((i, idx) => minor[check][idx] === i) => 모든 요소가 같은지 비교함.
    하지만 이방법은 크기가 같은 경우에만 수행이 가능하다.

  2. 위 방법보단 간단한 toString도 있다.
    하지만, 이 방법은 내부에 객체나 배열이 있게되면 제대로 수행하지 않는다

    1차원 배열정도는 가볍게 수행가능

그리고 너무 느림

3.JSON.stringify(combi) !== JSON.stringify(minor[check])

  1. [1,2,3].join("") 하는 방법도 있다.

확실하게 되는 방법은 3번, 3번을 사용하자

내코드

function isOnly(relation, columns) {
  // 해당되는 컬럼만 골라낸다
  let answer = relation.map((row) =>
    columns.map((column) => row[column]).join("")
  );
  return [...new Set(answer)].length === answer.length;
}
function isMinority(relation, columns) {
  // columns로 만들어낼수있는 조합중에 자신이 아닌 것이 유일하면 안된다.
  // 최소성에 어긋나므로
  return !getCombination(columns).some(
    (c) => columns.toString() !== c.toString() && isOnly(relation, c)
  );
}
function getCombination(array) {
  const combination = [];
  function DFS(combi, cur, r) {
    if (combi.length === r) {
      combination.push(combi);
    }
    for (let i = cur + 1; i < array.length; i++) {
      DFS([...combi, array[i]], i, r);
    }
  }
  for (let i = 1; i <= array.length; i++) {
    DFS([], -1, i);
  }
  return combination;
}
function solution(relation) {
  return getCombination(
    [...new Array(relation[0].length)].map((_, idx) => idx)
  ).filter(
    (columns) => isOnly(relation, columns) && isMinority(relation, columns)
  ).length;
}
profile
Frontend Ninja

0개의 댓글