[ํ๋ก๊ทธ๋๋จธ์ค Lv.3] ๋ถ๋ ์ฌ์ฉ์ (js)
https://programmers.co.kr/learn/courses/30/lessons/64064
function solution(user_id, banned_id) {
const permutationUser = permutation(user_id, banned_id.length);
const value = permutationUser.filter(v => check_id(v, banned_id))
const answer = [...new Set(value.map(v=> v.sort().join(' ')))];
return answer.length;
}
function check_id(u_id, b_id) {
u_id = u_id.sort((a,b) => a.length - b.length);
b_id = b_id.sort((a,b) => a.length - b.length);
for(let i = 0; i < u_id.length; i++) {
if(u_id[i].length !== b_id[i].length) {
return false;
}
for(let j = 0; j < b_id[i].length; j++){
if(u_id[i][j] !== b_id[i][j] && b_id[i][j] !== '*') {
return false;
}
}
}
return true;
}
function permutation(arr, selectNum) {
let result = [];
if (selectNum === 1) return arr.map((v) => [v]);
arr.forEach((v, idx, arr) => {
const fixer = v;
const restArr = arr.filter((_, index) => index !== idx);
const permuationArr = permutation(restArr, selectNum - 1);
const combineFixer = permuationArr.map((v) => [fixer, ...v]);
result.push(...combineFixer);
});
return result;
}
Function permutation
user_id๋ฅผ bannde_id์ ๊ธธ์ด๋งํผ ์์ด์ ๊ตฌํ๋ค.
ex)
user_id = [ '123', '234', '126']
bannde_id = ['1*3', '***']
=> [ ['123', '234'], ['123', '126'], ['234','126'] ]
Function check_id
permutation์์ ์ป์ ๋ฐฐ์ด๊ณผ banned_id๋ฅผ ์ธ์๋ก ๋ฐ๋๋ค.
ex)
['123', '234'], ['1*3', '***'] ๋์ ๊ธธ์ด ์์ ์์ผ๋ก ์ ๋ ฌํ๊ณ , ํด๋น ์กฐ๊ฑด์ ๋ง๋ ์ง ์ฒดํฌํ๋ค.
์กฐ๊ฑด 1
๋ฐฐ์ด ์์์ ๊ธธ์ด๊ฐ ๊ฐ์๊ฐ? '123' ๊ณผ '1*3'์ ๊ธธ์ด๊ฐ ๊ฐ๋ค.
์กฐ๊ฑด 2
๋ ๊ฐ์ด ๊ฐ์๊ฐ? ๊ฐ์ง ์๋ค๋ฉด banned_id์ ๊ฐ์ด '*' ์ธ๊ฐ? 2๊ฐ ๋ค๋ฅด๊ธด ํ์ง๋ง *์ด๋ฏ๋ก ๊ฐ์๊ฑธ๋ก ์ทจ๊ธํ๋ค.
false ํน์ true๋ฅผ return
Function solution
value ๋ณ์์์ filter๋ฅผ ์ด์ฉํด true๋ฅผ ๋ฆฌํดํ๋ ๊ฐ๋ง ๋ชจ์๋ค.
๊ทธ ํ ์ค๋ณต์ ์ ๊ฑฐํ๊ณ , ๊ธธ์ด๋ฅผ returnํด์ฃผ๋ฉด ๋!