Potato
μ•ˆλ…•ν•˜μ„Έμš”, κ°μž‘λ‹ˆλ‹€?πŸ₯” ^___^ 😺 github λ°”λ‘œκ°€κΈ° πŸ‘‰πŸ»

Algorithm/Programmers

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] ν•΄μ‹œ-μ „ν™”λ²ˆν˜Έ λͺ©λ‘ (level.1)

감자 πŸ₯” 2021. 9. 6. 23:19
λ°˜μ‘ν˜•

 

문제 링크

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

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - μ „ν™”λ²ˆν˜Έ λͺ©λ‘

μ „ν™”λ²ˆν˜ΈλΆ€μ— 적힌 μ „ν™”λ²ˆν˜Έ 쀑, ν•œ λ²ˆν˜Έκ°€ λ‹€λ₯Έ 번호의 접두어인 κ²½μš°κ°€ μžˆλŠ”μ§€ ν™•μΈν•˜λ € ν•©λ‹ˆλ‹€. μ „ν™”λ²ˆν˜Έκ°€ λ‹€μŒκ³Ό 같을 경우, κ΅¬μ‘°λŒ€ μ „ν™”λ²ˆν˜ΈλŠ” μ˜μ„μ΄μ˜ μ „ν™”λ²ˆν˜Έμ˜ μ ‘λ‘μ‚¬μž…λ‹ˆλ‹€. ꡬ쑰

programmers.co.kr

 

λ‚˜μ˜ν’€μ΄

  1. μ „ν™”λ²ˆν˜Έ λͺ©λ‘μ— μžˆλŠ” μ „ν™”λ²ˆν˜Έλ“€μ„ ν•˜λ‚˜μ”© μΆ”μΆœ
  2. μΆ”μΆœλœ μ „ν™”λ²ˆν˜Έ λ‚΄μ—μ„œ ν•œκΈ€μžμ”© λ½‘μ•„μ„œ n에 μ €μž₯
  3. n이 μΆ”μΆœλœμ „ν™”λ²ˆν˜Έμ™€ 같진 μ•Šμ§€λ§Œ, μ „ν™”λ²ˆν˜ΈλΆ€μ— μ‘΄μž¬ν•˜λŠ”μ§€ 확인
  4. (μΆ”κ°€) dic ꡬ성

μ΄ˆλ°˜μ—λŠ” μ΄λ ‡κ²Œλ§Œ ν’€μ—ˆμ—ˆλ‹€. 근데 νš¨μœ¨μ„± ν…ŒμŠ€νŠΈμ—μ„œ μ‹œκ°„μ΄ˆκ³Όκ°€ λœ¨λ©΄μ„œ μ—λŸ¬κ°€ 났닀. μ–΄λ–»κ²Œν•˜λ©΄ μ‹œκ°„ 초과λ₯Ό 쀄일 수 μžˆμ„κΉŒ κ³ λ―Όν•˜λ‹€κ°€, μΈν„°λ„·μ˜ 도움을 λ°›μ•—λ‹€. μ™œ λ¬Έμ œκ°€ ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜μΌκΉŒ? μƒκ°ν•΄λ³΄λ‹ˆ, dic 을 ν™œμš©ν•΄μ„œ νš¨μœ¨μ„±μ„ 높일 수 μžˆμ—ˆλ‹€. μ „ν™”λ²ˆν˜Έλ₯Ό dic에 keyκ°’μœΌλ‘œ λ„£μ–΄μ„œ key값듀을 λΉ„κ΅ν•¨μœΌλ‘œμ¨ (사싀상 λ‚΄κ°€ μ§  μ½”λ“œμ™€ 방법은 κ°™μŒ, dic만 ν™œμš©ν•  뿐) νš¨μœ¨μ„ λ†’μ˜€λ‹€.

# μ΄ˆλ°˜μ— μ§  μ½”λ“œ (νš¨μœ¨μ„± ν…ŒμŠ€νŠΈ μ‹œκ°„ 초과)
# def solution(phone_book):
#     for number in phone_book:
#         n = ""
#         for num in number:
#             n += num
#             if n in phone_book and n!=number:
#                 return False
#     return True

def solution(phone_book):
    dic = {}
    for i in range(len(phone_book)):
        dic[phone_book[i]] = 1 #keyκ°’λ§Œ μ“ΈκΊΌλ‹ˆκΉŒ κ·Έλƒ₯ valueλŠ” μ „λΆ€ 1λ„£μ–΄μ€Œ
    for number in phone_book:
        n = ""
        for num in number:
            n += num
            if n in dic and n!=number:
                return False
    return True

 

λ‹€λ₯Έ μ‚¬λžŒ 풀이

https://programmers.co.kr/learn/courses/30/lessons/42577/solution_groups?language=python3 

 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ 맀칭. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 맀칭 λ°›μœΌμ„Έμš”.

programmers.co.kr

λ‚΄κ°€ ν‘Ό 풀이가 λ§Žμ€ μ’‹μ•„μš”λ₯Ό 받은 풀이 쀑 ν•˜λ‚˜μ˜€λ‹€. 기뢄이 μ’‹λ‹€. μ—­μ‹œ μ‚¬λžŒλ“€μ€ μƒκ°ν•˜λŠ” 방식이 λ‹€ 같은건가 히히 μ΅œλŒ€ν•œ ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄μ„œ ν’€λ €κ³  λ…Έλ ₯ν•œ 점이 이런 κ²°κ³Όλ₯Ό 낸것같닀.

λ‚˜λž‘ 같이 μŠ€ν„°λ””ν•˜λŠ” μ˜€λΉ λŠ” μ•„λž˜μ™€ 같은 μ½”λ“œλ‘œ μ§―λ‹€. ν•΄μ‹œμ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜μ§„ μ•Šμ•˜μ§€λ§Œ 아이디어가 μ’‹μ•˜λ‹€. startswith κΈ°μ–΅ν•˜μž!

startswith ν•¨μˆ˜λ₯Ό μ΄μš©ν•œ μ½”λ“œ (μ’‹μ•„μš”μˆ˜κ°€ κ°€μž₯ λ§Žμ€ μ½”λ“œμ΄κΈ°λ„ 함)

from itertools import permutations
def solution(phone_book):
    answer = True
    for a in list(permutations(phone_book,2)):
        if a[1].startswith(a[0]): answer=False
        
    return answer

 

combination, sorted(key = len ) μ΄μš©ν•œ μ½”λ“œ

from itertools import combinations as c
def solution(phoneBook):
    answer = True
    sortedPB = sorted(phoneBook, key= len)
    for (a,b) in c( sortedPB,2):
        if a == b[:len(a)]:
            answer = False
    return answer

key=len...? 단어 길이순으둜 μ •λ ¬ν• μˆ˜ μžˆλŠ” 방법이닀. λ‚΄κ°€ μ΄ˆλ°˜μ— μ΄λ ‡κ²Œ ν•˜κ³ μ‹Άμ—ˆλŠ”λ°,,, 정렬을 μ΄λ ‡κ²Œ ν• μˆ˜μžˆλ‹€λ‹ˆ ν˜μ‹ μ μ΄λ‹€.. κΈ°μ–΅ν•΄λ‘μž

λ°˜μ‘ν˜•