๐Ÿ”ฅ Algorithm/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv.3] ๋ถˆ๋Ÿ‰ ์‚ฌ์šฉ์ž (js)

Lennon 2022. 2. 3. 03:31
728x90
๋ฐ˜์‘ํ˜•

https://programmers.co.kr/learn/courses/30/lessons/64064

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋ถˆ๋Ÿ‰ ์‚ฌ์šฉ์ž

๊ฐœ๋ฐœํŒ€ ๋‚ด์—์„œ ์ด๋ฒคํŠธ ๊ฐœ๋ฐœ์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋Š” "๋ฌด์ง€"๋Š” ์ตœ๊ทผ ์ง„ํ–‰๋œ ์นด์นด์˜ค์ด๋ชจํ‹ฐ์ฝ˜ ์ด๋ฒคํŠธ์— ๋น„์ •์ƒ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹น์ฒจ์„ ์‹œ๋„ํ•œ ์‘๋ชจ์ž๋“ค์„ ๋ฐœ๊ฒฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์‘๋ชจ์ž๋“ค์„ ๋”ฐ๋กœ ๋ชจ์•„ ๋ถˆ๋Ÿ‰

programmers.co.kr

 

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ํ•ด์ฃผ๋ฉด ๋!

728x90
๋ฐ˜์‘ํ˜•