본문 바로가기

알고리즘/프로그래머스

[프로그래머스][Python] 전화번호 목록

백준에서 트라이로 푼 문제이다.

 

이번엔 다른 사람 풀이를 분석해보자.

 

 

def solution(phoneBook):
    phoneBook = sorted(phoneBook)

    for p1, p2 in zip(phoneBook, phoneBook[1:]):
        print(p1, p2)
        if p2.startswith(p1):
            return False
    return True


print(solution(["12", "1235", "567", "88"]))

 

 

내장 함수에 대해 알아보자.

 

 

1. zip

순회할 수 있는 객체들을 받는다.

각 객체가 가지고 있는 원소를 Tuple 형태로 차례로 접근할 수 있는 반복자를 반환한다.

(반복자란 내부의 요소를 순회하는 객체이다.)

 

 

 

 

2. startswith(시작 문자, 시작 지점)

문자열이 특정 문자열로 시작하는지 알려준다.

 

 

 

 

위에 나온 풀이는 정렬했기에 가능한 알고리즘이었다.

이런 풀이는 코드가 짧아서 생산성이 좋다. 시간복잡도는 Sort + O(N^2)이다.