개발자 HOON
πŸ› HOON DEVLog
개발자 HOON
전체 방문자
였늘
μ–΄μ œ
  • 😎 전체 μΉ΄ν…Œκ³ λ¦¬ (137)
    • πŸ“ μ‹ μž… 인터뷰 μ€€λΉ„ (7)
    • πŸ¦” μ·¨μ—…μ€€λΉ„ 기둝 (7)
    • β˜• μžλ°” : JAVA (5)
    • 🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS (80)
    • 🌱 λ°±μ—”λ“œ : Backend (13)
    • πŸ§ͺ 컴퓨터과학 : CS (11)
    • πŸ—‚ λ°μ΄ν„°λ² μ΄μŠ€ : DB (1)
    • πŸƒ‍♂️ DEVLOG (8)
    • βš™οΈ Trouble Shooting (5)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • GitHub
  • Resume

곡지사항

인기 κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
개발자 HOON

πŸ› HOON DEVLog

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] λΆˆλŸ‰ μ‚¬μš©μž (level3, python)
🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] λΆˆλŸ‰ μ‚¬μš©μž (level3, python)

2022. 9. 27. 16:34

문제 μ„€λͺ…

κ°œλ°œνŒ€ λ‚΄μ—μ„œ 이벀트 κ°œλ°œμ„ λ‹΄λ‹Ήν•˜κ³  μžˆλŠ” "무지"λŠ” 졜근 μ§„ν–‰λœ 카카였이λͺ¨ν‹°μ½˜ μ΄λ²€νŠΈμ— 비정상적인 λ°©λ²•μœΌλ‘œ 당첨을 μ‹œλ„ν•œ 응λͺ¨μžλ“€μ„ λ°œκ²¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

이런 응λͺ¨μžλ“€μ„ λ”°λ‘œ λͺ¨μ•„ λΆˆλŸ‰ μ‚¬μš©μžλΌλŠ” μ΄λ¦„μœΌλ‘œ λͺ©λ‘μ„ λ§Œλ“€μ–΄μ„œ 당첨 처리 μ‹œ μ œμ™Έν•˜λ„λ‘ 이벀트 λ‹Ήμ²¨μž λ‹΄λ‹ΉμžμΈ "ν”„λ‘œλ„" μ—κ²Œ μ „λ‹¬ν•˜λ €κ³  ν•©λ‹ˆλ‹€. 이 λ•Œ κ°œμΈμ •λ³΄ λ³΄ν˜Έμ„ μœ„ν•΄ μ‚¬μš©μž 아이디 쀑 일뢀 문자λ₯Ό '*' 문자둜 κ°€λ €μ„œ μ „λ‹¬ν–ˆμŠ΅λ‹ˆλ‹€.

κ°€λ¦¬κ³ μž ν•˜λŠ” 문자 ν•˜λ‚˜μ— '*' 문자 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•˜μ˜€κ³  아이디 λ‹Ή μ΅œμ†Œ ν•˜λ‚˜ μ΄μƒμ˜ '*' 문자λ₯Ό μ‚¬μš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
"무지"와 "ν”„λ‘œλ„"λŠ” λΆˆλŸ‰ μ‚¬μš©μž λͺ©λ‘μ— λ§€ν•‘λœ 응λͺ¨μž 아이디λ₯Ό μ œμž¬ 아이디 λΌκ³  λΆ€λ₯΄κΈ°λ‘œ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

 

예λ₯Ό λ“€μ–΄, μ΄λ²€νŠΈμ— 응λͺ¨ν•œ 전체 μ‚¬μš©μž 아이디 λͺ©λ‘μ΄ λ‹€μŒκ³Ό κ°™λ‹€λ©΄

 

응λͺ¨μž 아이디
frodo
fradi
crodo
abc123
frodoc

 

λ‹€μŒκ³Ό 같이 λΆˆλŸ‰ μ‚¬μš©μž 아이디 λͺ©λ‘μ΄ μ „λ‹¬λœ 경우,

 

λΆˆλŸ‰ μ‚¬μš©μž
fr*d*
abc1**

λΆˆλŸ‰ μ‚¬μš©μžμ— λ§€ν•‘λ˜μ–΄ λ‹Ήμ²¨μ—μ„œ μ œμ™Έλ˜μ–΄μ•Ό μ•Ό ν•  제재 아이디 λͺ©λ‘μ€ λ‹€μŒκ³Ό 같이 두 κ°€μ§€ κ²½μš°κ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.



이벀트 응λͺ¨μž 아이디 λͺ©λ‘μ΄ λ‹΄κΈ΄ λ°°μ—΄ user_id와 λΆˆλŸ‰ μ‚¬μš©μž 아이디 λͺ©λ‘μ΄ λ‹΄κΈ΄ λ°°μ—΄ banned_idκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, λ‹Ήμ²¨μ—μ„œ μ œμ™Έλ˜μ–΄μ•Ό ν•  제재 아이디 λͺ©λ‘μ€ λͺ‡κ°€μ§€ 경우의 μˆ˜κ°€ κ°€λŠ₯ν•œ μ§€ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.


[μ œν•œμ‚¬ν•­]

  • user_id λ°°μ—΄μ˜ ν¬κΈ°λŠ” 1 이상 8 μ΄ν•˜μž…λ‹ˆλ‹€.
  • user_id λ°°μ—΄ 각 μ›μ†Œλ“€μ˜ 값은 길이가 1 이상 8 μ΄ν•˜μΈ λ¬Έμžμ—΄μž…λ‹ˆλ‹€.
    • 응λͺ¨ν•œ μ‚¬μš©μž 아이디듀은 μ„œλ‘œ μ€‘λ³΅λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    • 응λͺ¨ν•œ μ‚¬μš©μž μ•„μ΄λ””λŠ” μ•ŒνŒŒλ²³ μ†Œλ¬Έμžμ™€ 숫자둜만으둜 κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • banned_id λ°°μ—΄μ˜ ν¬κΈ°λŠ” 1 이상 user_id λ°°μ—΄μ˜ 크기 μ΄ν•˜μž…λ‹ˆλ‹€.
  • banned_id λ°°μ—΄ 각 μ›μ†Œλ“€μ˜ 값은 길이가 1 이상 8 μ΄ν•˜μΈ λ¬Έμžμ—΄μž…λ‹ˆλ‹€.
    • λΆˆλŸ‰ μ‚¬μš©μž μ•„μ΄λ””λŠ” μ•ŒνŒŒλ²³ μ†Œλ¬Έμžμ™€ 숫자, 가리기 μœ„ν•œ 문자 '*' 둜만 이루어져 μžˆμŠ΅λ‹ˆλ‹€.
    • λΆˆλŸ‰ μ‚¬μš©μž μ•„μ΄λ””λŠ” '*' 문자λ₯Ό ν•˜λ‚˜ 이상 ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
    • λΆˆλŸ‰ μ‚¬μš©μž 아이디 ν•˜λ‚˜λŠ” 응λͺ¨μž 아이디 쀑 ν•˜λ‚˜μ— ν•΄λ‹Ήν•˜κ³  같은 응λͺ¨μž 아이디가 μ€‘λ³΅ν•΄μ„œ 제재 아이디 λͺ©λ‘μ— λ“€μ–΄κ°€λŠ” κ²½μš°λŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • 제재 아이디 λͺ©λ‘λ“€μ„ κ΅¬ν–ˆμ„ λ•Œ 아이디듀이 λ‚˜μ—΄λœ μˆœμ„œμ™€ 관계없이 아이디 λͺ©λ‘μ˜ λ‚΄μš©μ΄ λ™μΌν•˜λ‹€λ©΄ 같은 κ²ƒμœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ ν•˜λ‚˜λ‘œ μ„Έλ©΄ λ©λ‹ˆλ‹€.

 

[μž…μΆœλ ₯ 예]

μž…μΆœλ ₯ μ˜ˆμ— λŒ€ν•œ μ„€λͺ…
 
μž…μΆœλ ₯ 예 #1

문제 μ„€λͺ…κ³Ό κ°™μŠ΅λ‹ˆλ‹€.

 

μž…μΆœλ ₯ 예 #2

λ‹€μŒκ³Ό 같이 두 κ°€μ§€ κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #3

λ‹€μŒκ³Ό 같이 μ„Έ κ°€μ§€ κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€.


풀이 μ½”λ“œ

from itertools import product

def solution(user_id, banned_id):
    answer = 0
    banned_candidate = []
    
    for ban in banned_id:
        temp = []
        for user in user_id:
            if len(user) == len(ban):
                flag = True
                for i in range(len(ban)):
                    if ban[i] != user[i] and ban[i] != '*':
                        flag = False
                        break
                if flag:
                    temp.append(user)
        banned_candidate.append(temp)
        
    result = []
    for p in product(*banned_candidate):
        if len(set(p)) == len(banned_id):
            flag = True
            for s in result:
                if len(s - set(p)) == 0:
                    # λ˜‘κ°™μ€κ²Œ 이미 μžˆλ‹€.
                    flag = False
                    break
            if flag:
                result.append(set(p))
                    
    answer = len(result)
    return answer

 

μ§‘ν•©κ³Ό product λͺ¨λ“ˆμ„ μ‚¬μš©ν•΄ ν’€μ΄ν–ˆλ‹€.

for문을 크게 2κ°€μ§€λ₯Ό λ³Ό 수 μžˆλŠ”λ°, μœ„μ˜ for문은 각 banned_idμ—μ„œ 제재 아이디가 될 수 μžˆλŠ” 후보λ₯Ό μ–»μ–΄μ˜€λŠ” 반볡문이고

μ•„λž˜μ˜ for문은 각 후보 μ€‘μ—μ„œ ν•˜λ‚˜μ”© 뽑은 λ‹€μŒμ—, 쀑볡이 μ—†λŠ”μ§€ μ²΄ν¬ν•˜λŠ” 둜직이 λ‹΄κ²¨μžˆλ‹€.

 

μœ„μ˜ for문은 import reλ₯Ό 톡해 μ •κ·œν‘œν˜„μ‹μœΌλ‘œ 풀이해도 λ¬΄λ°©ν•˜λ‹€.

μ•„λž˜μ˜ 경우 μ£Όμ˜ν•΄μ•Ό ν•  점은 λ‹€μŒκ³Ό κ°™λ‹€.

["A", "B"] ["B"] 이 두 개의 배열에 λŒ€ν•΄ productλ₯Ό 돌릴 경우, ("A", "B")와 ("B", "B")κ°€ λ‚˜μ˜¨λ‹€. ν•œ 아이디가 제재λ₯Ό λ‹Ήν•˜λ©΄, λ‹€μ‹œ λ°˜λ³΅λ˜μ–΄ 제재λ₯Ό λ‹Ήν•  수 μ—†μœΌλ―€λ‘œ, μ§‘ν•©μœΌλ‘œ μ²˜λ¦¬ν•΄ 쀑볡을 μ œκ±°ν•œλ‹€.

이후 길이λ₯Ό λΉ„κ΅ν•˜λ©΄, 쀑볡 체크가 κ°€λŠ₯ν•˜λ‹€.

 

ν•œ 번 더 쀑볡체크λ₯Ό ν•΄μ•Ό ν•˜λŠ”λ°, λͺ¨λ‘ λ‹€λ₯Έ μš”μ†Œλ‘œ 집합을 λ§Œλ“€μ—ˆλŠ”λ°, 이 전체 집합이 이미 μΉ΄μš΄νŒ… 된 경우λ₯Ό 확인해야 ν•œλ‹€.

이λ₯Ό μœ„ν•΄μ„œ len(s-set(p))인, μ°¨μ§‘ν•©μ˜ 길이λ₯Ό 톡해 이λ₯Ό 확인이 κ°€λŠ₯ν•˜λ‹€.

λ‹€μ†Œ κΉ”λ”ν•˜μ§„ μ•Šμ§€λ§Œ, 무리 없이 ν†΅κ³Όλ˜λŠ” μ½”λ“œμ΄λ‹€.

 

기껏해야 λͺ¨λ“  n에 λŒ€ν•΄ 8 μ΄ν•˜μ΄κΈ° λ•Œλ¬Έμ— 이런 λ°˜λ³΅μ„ 떑칠해도 μΆ©λΆ„νžˆ λŒμ•„κ°„λ‹€.

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ 동일쑰건 (μƒˆμ°½μ—΄λ¦Ό)

'🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 맀뉴 리뉴얼 (level2, python)  (0) 2022.10.10
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 보석 μ‡Όν•‘ (level3, python)  (0) 2022.10.10
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 삼각 λ‹¬νŒ½μ΄ (level2, python)  (0) 2022.09.26
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] κΈ°μ§€κ΅­ μ„€μΉ˜ (level3, python)  (1) 2022.09.25
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 124 λ‚˜λΌμ˜ 숫자 (level2, python)  (1) 2022.09.25
    '🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 맀뉴 리뉴얼 (level2, python)
    • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 보석 μ‡Όν•‘ (level3, python)
    • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 삼각 λ‹¬νŒ½μ΄ (level2, python)
    • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] κΈ°μ§€κ΅­ μ„€μΉ˜ (level3, python)
    개발자 HOON
    개발자 HOON
    쒋은 λ°±μ—”λ“œ μ—”μ§€λ‹ˆμ–΄κ°€ 되기 μœ„ν•œ 기둝을 λͺ¨μ•˜μŠ΅λ‹ˆλ‹€. # μ£Όλ‹ˆμ–΄ # λ°±μ—”λ“œ # 개발자

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”