Algorithm/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / PythonํŒŒ์ด์ฌ] ๋ถˆ๋Ÿ‰ ์‚ฌ์šฉ์ž

meeeeejin 2021. 5. 17. 14:35

๋ฌธ์ œ ๋งํฌ: https://programmers.co.kr/learn/courses/30/lessons/64064

 

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

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

programmers.co.kr

 

 

๋ฌธ์ œ ์„ค๋ช…

permutation์„ ์ด์šฉํ•ด user_id์˜ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์ˆœ์—ด์„ ๊ตฌํ•œ ๋’ค re(์ •๊ทœํ‘œํ˜„์‹)์„ ์ด์šฉํ•ด ์ œ์žฌ ์•„์ด๋””์™€ ์ผ์น˜ํ•˜๋Š”์ง€๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

1. ์ˆœ์—ด ๋งŒ๋“ค๊ธฐ

   - banned_id์˜ ๊ฐœ์ˆ˜๋งŒํผ user_id์˜ ์›์†Œ๋ฅผ ๋ฝ‘์•„์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆœ์—ด์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. 

 

2. ํ•ด๋‹น ์ˆœ์—ด๋กœ ์ œ์žฌ ์•„์ด๋”” ๋ชฉ๋ก์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธ

   - ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅด๊ฑฐ๋‚˜ (len(banned_id[i] != len(p[i])

   - ์ •๊ทœํ‘œํ˜„์‹์— ๋งž์ง€ ์•Š๋Š” ๊ฒฝ์šฐ (re.match(banned_id[i].replace('*', '.'), p[i]))

   - ์ˆœ์—ด์˜ i๋ฒˆ์งธ ์›์†Œ๊ฐ€ banned_id์˜ i๋ฒˆ์งธ ์›์†Œ์™€ ๋งค์น˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 

   - ์ˆœ์—ด์˜ n๊ฐœ์˜ ์›์†Œ๋กœ ์ œ์žฌ ๋ชฉ๋ก์˜ n๊ฐœ์˜ id๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด answer์— ํ•ด๋‹น ์ˆœ์—ด์„ ์ง‘ํ•ฉ์œผ๋กœ ๋ฐ”๊ฟ”์„œ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. 

 

   - ์ฐธ๊ณ ) ์ •๊ทœํ‘œํ˜„์‹์—์„œ re.match๋Š” ๋ฌธ์ž์—ด์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ •๊ทœ์‹๊ณผ ๋งค์น˜๋˜๋Š”์ง€ ์กฐ์‚ฌํ•˜์—ฌ, ์ •๊ทœ์‹์— ๋ถ€ํ•ฉํ•˜๋ฉด match ๊ฐ์ฒด๋ฅผ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด None์„ return ํ•ฉ๋‹ˆ๋‹ค. 

   - ์ฐธ๊ณ ) ์ •๊ทœ ํ‘œํ˜„์‹์˜ Dot(.) ๋ฉ”ํƒ€ ๋ฌธ์ž๋Š” ์ค„ ๋ฐ”๊ฟˆ ๋ฌธ์ž์ธ \n์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฌธ์ž์™€ ๋งค์น˜๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 

 

3. ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜ ๊ตฌํ•˜๊ธฐ

   - ๊ฐ€๋Šฅํ•œ user_id์˜ ์กฐํ•ฉ(์ง‘ํ•ฉ ์ž๋ฃŒํ˜•์œผ๋กœ ์ €์žฅํ–ˆ์œผ๋ฏ€๋กœ ์ˆœ์—ด์ด ์•„๋‹Œ ์กฐํ•ฉ์ด ๋จ)์ด answer์— ์ €์žฅ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ answer์˜ ๊ธธ์ด๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค. 

   - answer ๋˜ํ•œ ์ง‘ํ•ฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ง‘ํ•ฉ ๋‚ด์— ์ง‘ํ•ฉ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ frozenset์„ ์ด์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

 

 

 

 

์†Œ์Šค์ฝ”๋“œ

from itertools import permutations
import re

def solution(user_id, banned_id):
    answer = set()
    n = len(banned_id) # ์ œ์žฌ ์•„์ด๋”” ๊ฐœ์ˆ˜
    perm = list(permutations(user_id, n)) # user_id์˜ n๊ฐœ ์›์†Œ๋กœ ์ˆœ์—ด ์ƒ์„ฑ

    for p in perm:
        cnt = 0
        # ์•„์ด๋””๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ
        for i in range(n):
            if not re.match(banned_id[i].replace('*', '.'), p[i]) or len(banned_id[i]) != len(p[i]): 
                break
            else: 
                cnt += 1
        # p๋กœ ์ œ์žฌ ์•„์ด๋”” ๋ชฉ๋ก์€ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ
        if cnt == n: 
            answer.add(frozenset(p))
    
    return len(answer)

 

 

 

์ฐธ๊ณ  ์ž๋ฃŒ

์ ํ”„ ํˆฌ ํŒŒ์ด์ฌ - ์ •๊ทœํ‘œํ˜„์‹

 

728x90