diff --git "a/Programmers/\353\266\210\353\237\211\354\202\254\354\232\251\354\236\220/\353\266\210\353\237\211\354\202\254\354\232\251\354\236\220_\352\271\200\354\247\200\355\231\230.js" "b/Programmers/\353\266\210\353\237\211\354\202\254\354\232\251\354\236\220/\353\266\210\353\237\211\354\202\254\354\232\251\354\236\220_\352\271\200\354\247\200\355\231\230.js" new file mode 100644 index 0000000..f46a404 --- /dev/null +++ "b/Programmers/\353\266\210\353\237\211\354\202\254\354\232\251\354\236\220/\353\266\210\353\237\211\354\202\254\354\232\251\354\236\220_\352\271\200\354\247\200\355\231\230.js" @@ -0,0 +1,34 @@ +function solution(user_id, banned_id) { + let set = new Set(); + const length = banned_id.length; + const userLength = user_id.length; + let selected = Array(userLength).fill().map(() => false); + + function dfs(index, arr) { + if (index === length) { + set.add(arr.sort().join(',')) + return; + } + + for (let j = 0; j < userLength; j++) { + if (selected[j]) continue; + + if (user_id[j].length == banned_id[index].length && check(user_id[j], banned_id[index])) { + selected[j] = true; + dfs(index + 1, [...arr, user_id[j]]) + selected[j] = false; + } + } + + } + + dfs(0, []); + + return set.size +} + +function check(user, banned) { + let count = [...user].filter((char, index) => char === banned[index]).length + let star = [...banned].filter(char => char === '*').length; + return count + star === banned.length; +} \ No newline at end of file