Algorithm/Programmers

[Python] 전화번호 목록

느낌표 공장장 2021. 5. 27. 01:31
def solution(phone_book):
    phone_book.sort()
    
    for i, num in enumerate(phone_book) :
        l = len(num)
        if num == phone_book[i+1][:l] :
            return False
        if i == len(phone_book)-2 :
            return True

풀이

1. phone_book을 정렬한다. 좀 더 빠르게 파악할 수 있다.

   예) ["12","45","56","123","1235","567","88"] 이면 ['12', '123', '1235', '45', '56', '567', '88']으로 정렬된다.

2. for문과 enumerate()를 통해 인덱스(i)와 번호(num)을 받아와 바로 다음(i+1)에 있는 숫자의 접두사이면 False를 반환한다.

3. 마지막 번호 전까지 for문이 돌았다면 마지막 번호는 비교할 필요 없으므로 True를 반환한다.

 

조금 수정한 코드 (더 빠르다)

def solution(phone_book):
    phone_book.sort()
    
    for i in range(len(phone_book)-1) :
        l = len(phone_book[i])
        if phone_book[i] == phone_book[i+1][:l] :
            return False
    return True

enumerate() 함수 대신 range를 사용했다.

'Algorithm > Programmers' 카테고리의 다른 글

[Python] 뉴스 클러스터링  (0) 2021.05.28
[Python] 소수 찾기  (0) 2021.05.27
[Python] 괄호변환  (0) 2021.05.26
[Python] 튜플  (0) 2021.05.26
[Python] 예산  (0) 2021.05.20