본문 바로가기

Python/프로그래머스

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

문제 풀이

def solution(phone_book):
    answer = True
    
    # 배열 정렬
    phone_book = sorted(phone_book)

	# 첫번째 원소를 접두어로 삼아 검사
    f = phone_book[0]
    for i in phone_book[1:]:
        if f in i:
            answer = False
            break
            
    return answer

 이렇게 풀어도 전부 통과가 나오는데, 가만 생각해보면 {"12", "23", "234"} 등의 배열과 같이 첫 번째 원소가 아니라 그 이후의 원소가 접두어가 되는 경우가 생길 수 있다. 

해서 다른 사람이 푼 코드를 보았는데

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

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

 startswith이라는 함수를 쓴 코드가 눈에 띄었다. zip(phoneBook, phoneBook[1:]) 부분이([0], [1]) 쌍을 이루어주는 것이  매우 인상적이며, 이를 통해 한 쌍씩 비교하는 것이 상당히 큰 배움이 되었다.

 

 

 

문제 링크

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

 

코딩테스트 연습 - 전화번호 목록

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조

programmers.co.kr