https://programmers.co.kr/learn/courses/30/lessons/64064
banned_id
의 유저 후보를 구한다.function solution(user_id, banned_id) {
// 1
const candi = banned_id.map(banned => user_id.filter(id => {
if (banned.length !== id.length) return false;
for (var i = 0; i < banned_id.length; i++)
if (banned[i] !== '*' && banned[i] !== id[i])
return false;
return true
}))
let ans = 0;
const ansList = [];
const choose = (idx, choosed) => {
// 3
if (idx === candi.length) {
choosed.sort();
if (!ansList.some(v => JSON.stringify(v) === JSON.stringify(choosed))) {
ansList.push(choosed)
ans++;
}
return
}
// 2
candi[idx].forEach(s => {
if (!choosed.includes(s))
choose(idx + 1, [...choosed, s])
})
}
choose(0, [])
// 결과
return ans;
}
같은 요소의 배열을 비교하는 법 ->> 클릭
JSON.stringify()
대신 join('')
사용 choose
시작 값을 인수에서 바로 지정.function solution(user_id, banned_id) {
// 후보지 리스트
const candi = banned_id.map(banned => user_id.filter(id => {
if (banned.length !== id.length) return false;
for (var i = 0; i < banned_id.length; i++)
if (banned[i] !== '*' && banned[i] !== id[i])
return false;
return true
}))
const ansList = {};
const choose = (idx = 0, choosed = []) => {
if (idx === candi.length) {
choosed.sort();
ansList[choosed.join('')] = true;
return
}
candi[idx].forEach(s => {
if (!choosed.includes(s))
choose(idx + 1, [...choosed, s])
})
}
choose()
return Object.keys(ansList).length;
}