본문 바로가기
> 알고리즘 문제 풀이/프로그래머스

lv2-전화번호 목록 (python, 파이썬)

by bky373 2020. 10. 20.

- 1번: 내가 작성한 풀이

def solution(phone_book):
    lengths = set()
    pb_dict = dict()

    for p in phone_book:
        lengths.add(len(p))
        
    phone_book.sort()
    
    for l in lengths:
        for p in phone_book:
            if l > len(p):
                continue
            if p[:l] in pb_dict.keys() and p[:l] in pb_dict.values():
                return False 
            pb_dict[p[:l]] = p
    return True




- 2번: 1번 성공 후 참고한 풀이

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




- 확인하기!
  - 핵심 아이디어는 동일하나, 키값을 저장하냐(1번) 안하냐(2번)의 차이가 있었다.
    저장하지 않아도(2번 방식으로도) 잘 통과되었고, 효율성이 몇 배 더 좋았다. 
    할당이 필요하지 않다면 굳이 하지 말자!
  - 슬라이싱을 적극적으로 활용해도 좋을 것 같다!

댓글