Algorithm/Problems_Solving

프로그래머스(Programmers) LEVEL2 - 전화번호 목록

yunajoe 2022. 10. 3. 10:58
# 1st 

def solution(phone_book):
    answer = True
    phone_book.sort(key=lambda x: len(x))
    prefix = phone_book[0]
    # 이렇게 하면 안되는 이유가 만약에 prefix가 두번째 원소에는 해당되지 않고, 세번째 원소에 해당 되는 것이 있으면, 그래도 없는거로 해당이 되서 return이 끝난당
    for ele in range(1,len(phone_book)):
        if prefix in phone_book[ele]:           
            return False
        return True
        

# return True의 위치만 for문을 다 끝내고 실행이 되도록 하자 
def solution(phone_book):
    answer = True
    phone_book.sort(key=lambda x: len(x))
    prefix = phone_book[0]
    for ele in range(1,len(phone_book)):
        if prefix in phone_book[ele]:
            return False
    return True
    
    
    
정확성: 58.3
효율성: 12.5
합계: 70.8 / 100.0
# 2nd 

def solution(phone_book):
    answer = True
    phone_book.sort(key=lambda x: len(x))
    prefix = phone_book[0] 
    for ele in range(len(phone_book)):
        if ele == 0:
            continue
        elif prefix in phone_book[ele]:
            return False
    return True
    
    
정확성: 58.3
효율성: 12.5
합계: 70.8 / 100.0
# 3rd
# phone_book = ["934793", "34", "44", "9347"] 경우일때도 고려해서? (즉, 접수사로 지정한 것이 문자열의 앞에 아닌 중간에 있을수도 있어서) 


def solution(phone_book):
    answer = True
    phone_book.sort(key=lambda x: len(x))
    prefix = phone_book[0]
    prefix_num = len(prefix)

    for ele in range(len(phone_book)):
        if ele == 0:
            continue
        elif prefix in phone_book[ele][:prefix_num]:
            return False
    return True
    
정확성: 70.8
효율성: 12.5
합계: 83.3 / 100.0
# 4th (using hashmap) 
def solution(phone_book):
    hash_map = {}
    answer = True
    for phone_number in phone_book:
        hash_map[phone_number] = 1  #  {"119":1,"97674223":1,"1195524421":1}
    
    for phone_number in phone_book:
        prefix = ""
        for number in phone_number:
            prefix += number 
            if prefix in hash_map and prefix != phone_number:  # 자기와 똑같은 것은 제외
                answer = False
    return answer