티스토리 뷰

문제


전화번호 목록에 있는 원소들 중에서

특정 원소로 시작하는 번호 (접두번호) 가 있는지 확인한다. 

 

만약, 어떤 번호가 다른 번호의 접두 번호인 경우가 있으면 false를 그렇지 않으면 true를 return

 

제한사항

phone_book의 길이는 1 이상 1,000,000 이하입니다.
각 전화번호의 길이는 1 이상 20 이하입니다.

 

입출력 예제

phone_book = ["119", "1190223", "5939130"]       : False

phone_book = ["123", "456", "789"]                           : True

phone_book = ["12", "123", "1235", "567", "88"] : False

 

풀이


def solution(phone_book):
    answer = False
    data = list(phone_book)

    idx = 0
    for x in data:
        del data[idx]
        idx += 1
        for y in data[1:]:
            if y.startswith(x):
                return answer
            else :
                continue

    answer = True
    
    return answer

 

NOTE

최초 풀이. 
애초에 list 자료형으로 입력을 받는데, 그것도 모르고 list를 씌웠다.
그리고 계속 test 8, 9에서 오류가 나온다.

그러다가 모든 원소들을 하나씩 비교할 필요가 없다는 것을 깨달았다.
처음 입력값을 sort해서 가장 짧은 녀석을 탐침으로 사용해 나머지 원소들을 검사하면 되는 것이다.

 

def solution(phone_book):
    phone_book.sort()
    answer = False
    
    probe = phone_book[0]
    test = phone_book[1:]
    
    for i in test:
        if len(probe) != len(i):
            if i.startswith(probe):
                return answer
    
    answer = True
    return answer

 

@ 문제 출처 : https://programmers.co.kr/learn/courses/30/parts/12077

댓글
링크
최근에 올라온 글
Total
Today
Yesterday