[21/10/26 KATA NINJA]不良ユーザー
マイコード
function solution(user_id, banned_id) {
let answer = 0;
const memo = [];
const r = banned_id.length;
// 밴의 수만큼 순열을 구한다.
const per = DFS([...user_id],r);
//순열을 순회하면서 ban되면서 중복이 아닌 요소를 찾을때마다 카운트를 1 올려준다.
per.forEach((p)=>{
const target = [...p].sort().join("");
// ban이면서 중복이 아닌 경우 answer을 늘려준다.
if(isBan(p) && !memo.includes(target)){
memo.push(target);
answer++;
}
})
return answer;
// 순열 코드이다.
function DFS(array, r){
if(r === 1){
return array.map((str)=>[str])
}
const target = [];
for(let i=0;i<array.length;i++){
const cur = array[i];
const res = DFS([...array.slice(0,i),...array.slice(i+1)],r-1);
res.forEach(item => {
target.push([cur,...item]);
})
}
return target;
}
// 밴을 체크한다.
function isBan(p){
// 같은 색인 요소들을 비교하여 하나라도 해당되지 않는다면 , 그 순열 요소는 유망하지 않다.
for(let i=0;i<banned_id.length;i++){
const cur = p[i];
const target = banned_id[i];
// 길이가 다르면 false이다. 해당 순열 자체가 유망하지 않다.
if(cur.length !== target.length){
return false;
}
// *이 아니면서 다르다면, 다른 문자열인 것이므로 해당 순열은 유망하지 않다.
for(let j=0;j<cur.length;j++){
if(cur[j] !== target[j] && target[j] !== '*'){
return false;
}
}
}
return true;
}
}
配列メソッドを使用して重複チェックを行っています.mapを使用して重複データをチェックする(速度を速めるため)
id要素とシーケンス要素の文字列比較を無効にすると改善できますか?
部分改良コード
const memo = new Map();
...
per.forEach((p)=>{
const target = [...p].sort().join("");
if(isBan(p) && !memo.get(target)){
memo.set(target,true);
answer++;
}
})
const memo = {};
...
per.forEach((p)=>{
const target = [...p].sort().join("");
if(isBan(p) && !memo[target]){
memo[target] = true;
answer++;
}
})
改善してない…?アレイ自体もオブジェクトなので、それらの間には大きな違いはありません.
Reference
この問題について([21/10/26 KATA NINJA]不良ユーザー), 我々は、より多くの情報をここで見つけました https://velog.io/@rat8397/211026-KATA-NINJA-불량-사용자テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol