본문 바로가기

⏳ 알고리즘/python 알고리즘 문제 풀이

프로그래머스 - LV2. 전화번호 목록

문제

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

 

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

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

programmers.co.kr

 

코드

1) startswitch()이용

오랜만에 다시 풀어봤는데 효율성 테스트에서 실패가 떴다.

def solution(phone_book):
    phone_book.sort(key=lambda x:len(x))
    
    for i in range(len(phone_book)):
        for j in range(i+1, len(phone_book)):
            if phone_book[j].startswith(phone_book[i]):
                return False
            
    return True

 

2) 길이 비교 구문 추가

위에 코드에서 시간을 줄이기 위해 각 전화번호의 길이를 비교하는 구문을 추가하였다.

문제에서 중복된 전화번호가 없다고 하였으므로, 길이가 같은 전화번호가 있다면 다른 전화번호이므로 비교할 필요 없이 반복문을 끝내면 된다.

def solution(phone_book):
    phone_book.sort()
    
    for i in range(len(phone_book)):
        for j in range(i+1, len(phone_book)):
            if len(phone_book[i]) == len(phone_book[j]):
                break
            if phone_book[j].startswith(phone_book[i]):
                return False
            
    return True