코딩테스트 연습/프로그래머스

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

슈퍼짱짱 2022. 3. 11. 15:37
반응형

파이썬으로 코딩테스트 연습하기 :: 프로그래머스 > 해시  > 전화번호 목록

 

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

 

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

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

programmers.co.kr

 

 


Solution

 

def solution(phone_book):
    phone_book.sort()
    answer = True
    for i in range(len(phone_book)-1) :
        x = phone_book[i]
        y = phone_book[i+1]
        x_len = len(x)
        y_len = len(y)

        if x_len <= y_len :
            if x in y[:x_len] :
                answer =False
                break
        else :
            if y in x[:y_len] :
                answer = False
                break
    return answer

 


다른 사람의 풀이

 

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

 


이 문제에서 가장 중요한건 sort()다.

sort 없이 그냥 for문 돌리면 효율성에서 통과하지 못한다.

 

zip() 으로 phoneBook과 phoneBook[1:] 을 묶어주면 

phoneBook[i]와 phoneBook[i+1]을 비교해 줄 필요없이 for문 자체에서 인덱싱이 가능하다.

내부 원리는 같으나, 코드가 더 깔끔해진다.

 

String.startwith() 함수는 기억해두면 좋을 것 같다.

반응형