Skip to content

Commit 2b06a76

Browse files
committed
카카오 2019 리크루먼트 3번 후보키
1 parent 8cc3d8c commit 2b06a76

1 file changed

Lines changed: 20 additions & 41 deletions

File tree

PROGRAMMERS/카카오/2019공채/후보키.js

Lines changed: 20 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,44 @@
1+
const MAX_STRLEN = 8;
2+
3+
const padString = (str, len) => {
4+
return Array.from({ length: len - str.length + 1 }).join("0") + str;
5+
};
6+
17
function solution(relation) {
28
const columns = relation[0].length;
39
const rows = relation.length;
4-
const rset = new Set();
510

611
const validate = (list) => {
712
const rset = new Set();
813
const len = list.length;
9-
10-
if (!len) return false;
1114
for (let i = 0; i < rows; i++) {
12-
const str = list.reduce((acc, cur) => {
13-
let s = relation[i][cur];
14-
15-
return (
16-
acc +
17-
s +
18-
Array.from({ length: 8 - s.length })
19-
.map(() => "")
20-
.join("0")
21-
);
22-
}, "");
23-
24-
if (rset.has(str)) return false;
25-
26-
rset.add(str);
15+
let temp = "";
16+
for (let j = 0; j < len; j++) {
17+
if (list[j] === "1") temp += padString(relation[i][j], MAX_STRLEN);
18+
}
19+
if (rset.has(temp)) return false;
20+
rset.add(temp);
2721
}
28-
2922
return true;
3023
};
3124

32-
const idxList = Array.from({ length: columns }).map((_, i) => i);
33-
const numSet = new Set();
34-
35-
const dfs = (list, rest) => {
36-
numSet.add(list.sort((a, b) => a - b).join(""));
37-
38-
rest.forEach((l, i) => {
39-
const temp = rest.slice();
40-
temp.splice(i, 1);
41-
dfs(list.concat([l]), temp);
42-
});
43-
};
44-
45-
dfs([], idxList);
46-
4725
const resultList = [];
4826

49-
Array.from(numSet).forEach((l) => {
50-
const temp = l.split("");
27+
const list = Array.from({ length: Math.pow(2, columns) - 1 }).map((_, i) => {
28+
const str = padString(parseInt(i + 1).toString(2), columns);
5129

52-
if (validate(temp)) {
30+
if (validate(str)) {
5331
let go = true;
5432
resultList.some((r) => {
55-
if (l.indexOf(r) >= 0 || r.indexOf(l) >= 0) {
33+
const a = parseInt(r, 2);
34+
const b = parseInt(str, 2);
35+
const c = a | b;
36+
if (a === c || b === c) {
5637
go = false;
5738
return true;
5839
}
5940
});
60-
if (go) {
61-
resultList.push(l);
62-
}
41+
if (go) resultList.push(str);
6342
}
6443
});
6544

0 commit comments

Comments
 (0)