codes/programmers

42577 전화번호 목록

카제xd 2024. 12. 6. 04:05

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

 

trial #1

- prefix가 아니라 in으로 잘못 처리했음

- 효율성 테스트 시간 초과. (이중 for문은 최악의 경우 O(n^2)의 시간복잡도.) -> startswith로 고쳐도 여전히 문제되는 부분.

def solution(phone_book):
    
    rank = sorted(phone_book, key=len)
    
    for i in range(len(rank)):
        for j in range(i+1, len(rank)):
            if rank[i] in rank[j]: # startswith으로 수정해야
                return False
            
    return True

 

 

trial#2

def solution(phone_book):
    
    hash = set()
    
    for pb in sorted(phone_book, key=len):
        for i in range(len(pb)):
            if pb[:i+1] in hash:
                return False
        else:
            hash.add(pb)
            
    return True

 

 

[개선할 점]

- 해시 문제는 dict나 set을 통하여 해결할 수 있음.

- 정렬 없이 dict에 phone number들을 넣고 각 pn마다 문자열을 늘려가며 비교하는 것도 가능.