Table of Contents

코딩테스트

[파이썬] 해시 > 전화번호 목록

꼬꼬마코더 2024. 5. 27. 22:41
728x90

해시로 풀어보기

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

def solution(phone_book):
    answer = True
    hash_map = {}
    # 해시맵 key값에 phonenumber를 담는다.
    for phone in phone_book:
        hash_map[phone] = 0
        
    for phone in phone_book:  
        prefix =''
        # phonenumber를 for문에서 돌려주면 각각 한 자리씩 자를 수 있다.
        # 한 자리씩 계속 더하면서 기존의 해시맵에 들어있는 phonenumber와 비교한다.
        for char in phone:
            prefix += char
            if prefix in hash_map and prefix!=phone:
                answer = False    
    return answer

이 문제를 해시로 풀면 안될 것 같은데 해시문제니까 해시로 풀어봤습니다. 파이썬에는 startswith라는 편하고 멋진 함수가 있으니까 이걸 사용해서 풀어보겠습니다. 

startswith 로 풀어보기

def solution(phone_book):
    answer = True

    phone_book.sort()
    phone_book.append(phone_book[0])
    
    for i in range(len(phone_book)-1):
        phone = phone_book[i]
        phone2 = phone_book[i+1]
        if phone2.startswith(phone):
            answer = False
            break
            
    return answer

여기서 먼저 sort해서 str길이가 짧은 것부터 긴 것 순으로 나열합니다. 그 다음 두 값을 계속 비교하기 위해 맨 끝에 맨 첫 값을 append합니다. for문을 돌면서 phone2가 phone으로 시작하는지 확인합니다. 여기서 for문은 length가 1작게 돕니다. 왜냐면 제가 앞서 맨 첫 값을 하나 더 추가해줬으니까요.

좀 빨라진 것 같습니다! 문자열 함수를 많이 알아두는 것이 좋겠습니다.

'코딩테스트' 카테고리의 다른 글

[파이썬] 해시 > 폰켓몬  (1) 2024.05.26
[파이썬] 해시맵 HashMap  (0) 2024.05.26
[파이썬] TwoSum 해시로 풀기  (1) 2024.05.25
[파이썬] 스택/큐 > 주식가격  (0) 2024.05.23
[파이썬] 스택/큐 > 기능개발  (0) 2024.05.23