-->

[프로그래머스] 해시 - 전화번호 목록 (파이썬)

반응형

프로그래머스 해시 - 전화번호 목록, 문제 확인

문제 설명은 아래와 같다.

 


한 전화번호가 다른 번호의 접두어인 경우가 있는지 확인하려 함

구조대 전화번호가 119, 지영석의 전화번호가 11 9552 4421일 때, 구조대 전화번호는 지영석 전화번호의 접두사임

phone_book은 전화번호를 담은 배열

접두어인 경우가 있으면 flase, 아니면 true를 반환

 

 

프로그래머스 해시 - 전화번호 목록, 문제 풀이 (파이썬)

일단 같은 인덱스인 경우는 스킵하고 더 짧은 값을 찾아낸 후 각 값을 더 짧은 길이만큼으로 잘랐을 때, 포함되는 관계가 있는지 확인하는 방식을 사용했다. 

 

def solution(phone_book):

    for i,k in enumerate(phone_book):
        for i_,k_ in enumerate(phone_book):
            if i==i_: continue
            
            # 더 짧은 값을 찾아냄
            if len(k)>len(k_): minlen=len(k_)
            else: minlen=len(k)
            
            # 포함되는 관계인지 확인
            if k[:minlen] in k_[:minlen]:
                return False
    return True

 

 

별로 잘푼 문제인 것 같지는 않다. 이중 반복문을 돌기때문에 시간 비효율적이다ㅠㅠ 

 

 

 

 

프로그래머스 해시 - 전화번호 목록, 다른 사람의 풀이

다른 사람의 풀이를 살펴보니, ZIP을 사용한 풀이가 있다. 

 

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

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

 

 

난 위 풀이를 보고 아래와 같은 반복이 가능하다는 것을 처음 알았다ㅋㅋ zip을 사용하면 굳이 반복문을 2중으로 돌 필요가 없는 것이다. 그리고 startswith는 문자열이 특정문자로 시작하는지 여부를 알려주기 때문에 p2에 p1 값이 들어가있는지 확인할 수 있다.

 

 

댓글

Designed by JB FACTORY