티스토리 뷰

문제

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

 

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

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

programmers.co.kr

풀이

가장 쉬운 방법은 각각의 원소에 대하여 모든 원소와 매칭 하는 것이겠지만, 원소의 개수가 최대 1,000,000개 이므로 O(N^2)의 시간 복잡도로는 시간 초과가 날것이다.

 

따라서 모든 원소를 딕셔너리의 key로 만들어주고 각 원소에 대해서 문자열의 앞부분을 슬라이싱하여 딕셔너리의 key에 존재하는지 확인하였다.

 

딕셔너리에서 key가 존재하는 찾는 시간 복잡도는 O(1)이다.

 

따라서 원소의 개수는 최대 1,000,000개이고 문자열의 길이는 최대 20이므로 19,000,000번 안에 찾을 수 있을 것이다.

코드

def solution(phone_book):
    book = {key: 0 for key in phone_book}
    for num in phone_book:
        for i in range(1, len(num)):
            if num[:i] in book:
                return False
    return True

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함