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진법의 정수로 바뀜.combi.every((i, idx) => minor[check][idx] === i)
=> 모든 요소가 같은지 비교함.
하지만 이방법은 크기가 같은 경우에만 수행이 가능하다.
위 방법보단 간단한 toString
도 있다.
하지만, 이 방법은 내부에 객체나 배열이 있게되면 제대로 수행하지 않는다
1차원 배열정도는 가볍게 수행가능
그리고 너무 느림
3.JSON.stringify(combi) !== JSON.stringify(minor[check])
확실하게 되는 방법은 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;
}