호기심 많은 분석가

[프로그래머스] 해시 - 전화번호 목록 (Python) 본문

Coding/Coding Test & Algorithm

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

DA Hun 2021. 6. 23. 12:27
 

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

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

programmers.co.kr

def solution(phone_book):
    answer = True
    phone_book.sort()
    for i in range(len(phone_book)-1) :
        if phone_book[i] == phone_book[i+1][:len(phone_book[i])]:
            return False
    return answer

 우선 sort 문법을 통해 배열을 앞자리 크기 순으로 정렬해준다. 그러면 ["12", "124", "1235"] -> ["12", "1235", "124"]로 정렬된다. 접두어가 되는지 확인하기 위해서는 i+1번째 숫자의 앞부분과 i의 숫자가 일치하는지만 확인해주면 된다. 

 sort를 통한 앞자리 숫자별 정렬과, i와 i+1번째 항의 비교라는 아이디어를 가지고 있으면 해결할 수 있는 문제였다.

 처음에는 in 문법을 사용하여 오류가 떴는데, 중간에 포함되는 경우를 내가 생각하지 못했다. 

다른 풀이

def solution(phone_book):
    phone_book = sorted(phone_book)
    for i in range(len(phone_book)-1) : 
        if phone_book[i+1].startswith(phone_book[i]) :
            return False
    return True

 위의 코드와 굉장히 흡사하지만 하나 좋은 문법을 알게 되었다. startswith라는 문법인데 이름처럼 접두어인지 확인해주는 문법이다. 알아두면 앞으로도 자주 쓰게 될 것 같아서 가지고 왔다.