๐Ÿ˜ˆ[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ถˆ๋Ÿ‰ ์‚ฌ์šฉ์ž

Chobbyยท2022๋…„ 3์›” 23์ผ
0

Programmers

๋ชฉ๋ก ๋ณด๊ธฐ
23/345

๋ฌธ์ œ ์„ค๋ช…

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

์˜ˆ๋ฅผ ๋“ค์–ด, ์ด๋ฒคํŠธ์— ์‘๋ชจํ•œ ์ „์ฒด ์‚ฌ์šฉ์ž ์•„์ด๋”” ๋ชฉ๋ก์ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๋ฉด

์‘๋ชจ์ž ์•„์ด๋””
frodo
fradi
crodo
abc123
frodoc

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ถˆ๋Ÿ‰ ์‚ฌ์šฉ์ž ์•„์ด๋”” ๋ชฉ๋ก์ด ์ „๋‹ฌ๋œ ๊ฒฝ์šฐ,

๋ถˆ๋Ÿ‰ ์‚ฌ์šฉ์ž
fr*d*
abc1**

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

์ œ์žฌ ์•„์ด๋””
frodo
abc123

์ œ์žฌ ์•„์ด๋””
frodo
abc123

์ด๋ฒคํŠธ ์‘๋ชจ์ž ์•„์ด๋”” ๋ชฉ๋ก์ด ๋‹ด๊ธด ๋ฐฐ์—ด user_id์™€ ๋ถˆ๋Ÿ‰ ์‚ฌ์šฉ์ž ์•„์ด๋”” ๋ชฉ๋ก์ด ๋‹ด๊ธด ๋ฐฐ์—ด banned_id๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋‹น์ฒจ์—์„œ ์ œ์™ธ๋˜์–ด์•ผ ํ•  ์ œ์žฌ ์•„์ด๋”” ๋ชฉ๋ก์€ ๋ช‡๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

[์ œํ•œ์‚ฌํ•ญ]

  • user_id ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 1 ์ด์ƒ 8 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • user_id ๋ฐฐ์—ด ๊ฐ ์›์†Œ๋“ค์˜ ๊ฐ’์€ ๊ธธ์ด๊ฐ€ 1 ์ด์ƒ 8 ์ดํ•˜์ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    - ์‘๋ชจํ•œ ์‚ฌ์šฉ์ž ์•„์ด๋””๋“ค์€ ์„œ๋กœ ์ค‘๋ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    - ์‘๋ชจํ•œ ์‚ฌ์šฉ์ž ์•„์ด๋””๋Š” ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž์™€ ์ˆซ์ž๋กœ๋งŒ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • banned_id ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 1 ์ด์ƒ user_id ๋ฐฐ์—ด์˜ ํฌ๊ธฐ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • banned_id ๋ฐฐ์—ด ๊ฐ ์›์†Œ๋“ค์˜ ๊ฐ’์€ ๊ธธ์ด๊ฐ€ 1 ์ด์ƒ 8 ์ดํ•˜์ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    - ๋ถˆ๋Ÿ‰ ์‚ฌ์šฉ์ž ์•„์ด๋””๋Š” ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž์™€ ์ˆซ์ž, ๊ฐ€๋ฆฌ๊ธฐ ์œ„ํ•œ ๋ฌธ์ž '' ๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
    - ๋ถˆ๋Ÿ‰ ์‚ฌ์šฉ์ž ์•„์ด๋””๋Š” '
    ' ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
    - ๋ถˆ๋Ÿ‰ ์‚ฌ์šฉ์ž ์•„์ด๋”” ํ•˜๋‚˜๋Š” ์‘๋ชจ์ž ์•„์ด๋”” ์ค‘ ํ•˜๋‚˜์— ํ•ด๋‹นํ•˜๊ณ  ๊ฐ™์€ ์‘๋ชจ์ž ์•„์ด๋””๊ฐ€ ์ค‘๋ณตํ•ด์„œ ์ œ์žฌ ์•„์ด๋”” ๋ชฉ๋ก์— ๋“ค์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • ์ œ์žฌ ์•„์ด๋”” ๋ชฉ๋ก๋“ค์„ ๊ตฌํ–ˆ์„ ๋•Œ ์•„์ด๋””๋“ค์ด ๋‚˜์—ด๋œ ์ˆœ์„œ์™€ ๊ด€๊ณ„์—†์ด ์•„์ด๋”” ๋ชฉ๋ก์˜ ๋‚ด์šฉ์ด ๋™์ผํ•˜๋‹ค๋ฉด ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ํ•˜๋‚˜๋กœ ์„ธ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

[์ž…์ถœ๋ ฅ ์˜ˆ]

user_idbanned_idresult
["frodo", "fradi", "crodo", "abc123", "frodoc"]["frd", "abc1**"]2
["frodo", "fradi", "crodo", "abc123", "frodoc"]["rodo", "rodo", "**"]2
["frodo", "fradi", "crodo", "abc123", "frodoc"]["frd", "*rodo", "**", "**"]3

์ž…์ถœ๋ ฅ ์˜ˆ์— ๋Œ€ํ•œ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

๋ฌธ์ œ ์„ค๋ช…๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ์žฌ ์•„์ด๋””
frodo
crodo
abc123

์ œ์žฌ ์•„์ด๋””
frodo
crodo
abc123

์ž…์ถœ๋ ฅ ์˜ˆ #3

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ธ ๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ์žฌ ์•„์ด๋””
frodo
crodo
abc123
frodoc

์ œ์žฌ ์•„์ด๋””
fradi
crodo
abc123
frodoc

์ œ์žฌ ์•„์ด๋””
fradi
frodo
abc123
frodoc

๋‚˜์˜ ํ’€์ด

function solution(user_id, banned_id) {
    // ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ ๋ณ„ ๋ฐด ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ์ด์šฉ์ž
    const can = banned_id.map(banned => user_id.filter((user) => {
        if(banned.length !== user.length) return false
        
        for(let i = 0 ; i < banned_id.length ; i++) {
            if(banned[i] !== '*' && banned[i] !== user[i]) return false
        }
        return true
    }))
    
    // ์ •๋‹ต ๋ฆฌ์ŠคํŠธ
    const ansList = {}
    
    const dfs = (idx = 0, already = []) => {
        // ๊ฒฝ์šฐ์˜ ์ˆ˜ ์ˆ˜์™€ ๊ฐ™์•„์กŒ๋‹ค๋ฉด
        if(idx === can.length) {
            // ๋ฐฐ์—ด์„ ์ •๋ ฌํ•˜๊ณ  key์— ๋งž๋Š” ๊ฐ’์„ true๋กœ ์„ ์–ธ
            already.sort()
            ansList[already.join('')] = true
            return 
        }
        
        // ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ฐฉ๋ฌธํ•œ ๋ฐฐ์—ด์— ์‚ฝ์ž…ํ•˜๊ณ  ์ธ๋ฑ์Šค๋ฅผ 1 ๋†’์ž„
        can[idx].forEach(item => {
            if(!already.includes(item)) {
                dfs(idx+1, [...already, item])
            }
        })
    }
    dfs()
    // ์ •๋ฆฌ๋œ ์˜ค๋ธŒ์ ํŠธ์˜ ํ‚ค ๊ฐ’์€ ๊ณ ์œ ํ•˜๋ฏ€๋กœ ๊ณ ์œ  ๊ฐ’์˜ ๊ธธ์ด๋ฅผ return 
    return Object.keys(ansList).length
}
profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€