파이썬으로 부시자! Python with Coreenee

프로그래머스 - 해시 - 전화번호 목록

문제

스크린샷 2020-04-15 오후 5 12 10

입력

스크린샷 2020-04-15 오후 5 12 18


나의 처음 코드

이 문제는 해쉬라기 보다는, 그냥 완전탐색 느낌으로 풀었다… 그래도 시간초과가 안 난걸 보아하니 딱히 문제가 없는 것 같다. 여기서 깨달은거는 [1,2,3,4] 라는 리스트가 있으면 [:100]을 해도 없는 인덱스 참조오류가 안 뜨고 리스트의 끝까지 출력한다는 뜻이다. 즉 세그먼트 안 뜨고 잘 작동한다는 뜻이다. 코드는 다음과 같다.

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

    return answer

for문 2개를 써서 풀 수도 있지만, startswith라는 함수를 써서 할 수도 있다.

str.startswith(prefix, start=0, end=-1)
str.startswith(prefix, start=0, end=-1)

위와 같이 함수는 구성이 되어있고, String의 내장함수이다. 위의 함수를 쓰면 원하는 index range 안에서 겹치는 문자가 있는지 없는지 볼 수 있다. 참고하자~! zip과 startswith로 문제 풀기는 다음 코드 참고.
~~~python def solution(phoneBook): phoneBook = sorted(phoneBook)

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