전화번호 목록 : level2_파이썬

흠냐뤼·2021년 6월 22일
0

프로그래머스

목록 보기
2/9

문제

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

내가 푼 풀이

def solution(phone_book):
    answer = True

    phone_book.sort(key=len)

    i = 0
    while i < len(phone_book):
        now = phone_book[i]
        for i in range(i+1,len(phone_book)):
            if now == phone_book[i][:len(now)]:
                answer = False
                break
        if answer == False:
            break
        i += 1

    return answer

✔ 그냥 정렬하면 첫번째 문자의 크기를 기준으로 정렬되길래 길이를 기준으로 정렬할 순 없을까 찾아보다가 key = len을 조건으로 주면 된다는 것을 배웠다!!

➡정확성 테스트 12,15,19번과 효율성 테스트 4번에서 실패가 떴다.
결국 원인을 찾지 못하고 다른 사람의 풀이를 참고했다😥.
대체 어디가 틀린걸까?!?!

좋아요가 가장 많았던 풀이

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

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

✔ zip()
✔ startswith()
처음에는 길이 조건을 주지 않고 그냥 정렬하면 안되지 않나 했는데 어차피 접두어일 경우를 찾는 것이기 때문에 문제가 되지 않는 부분이었다. 예를 들어 8812, 88일 경우 정렬하면 88, 8812 순으로 정렬되니까 문제 없다!!
zip()은 알고는 있어도 직접 코드에서 내가 이용해본 적이 없다.흑 제대로 이해를 못했나?!
startswith()는 처음 본 함수다.p2가 p1으로 시작하는 문자열이라면 True를 반환하는 함수다.

해시를 이용한 풀이

def solution(phone_book):
    answer = True
    hash_map = {}
    for phone_number in phone_book:
        hash_map[phone_number] = 1
    print(hash_map)

    for phone_number in phone_book:
        temp = ""
        for number in phone_number:
            print("number:",number)
            temp += number
            if temp in hash_map and temp != phone_number:
                print(temp)
                return False
    return answer

해시 문제를 몇 문제 풀어보긴 했지만 아직 제대로 맞춘 적이 거의 없다ㅠㅠ..

profile
https://github.com/ono212

0개의 댓글

관련 채용 정보