Algorithm/1일 1코테

[💕 프로그래머스 Python] 전화번호 목록

대인보우 2020. 10. 21. 13:41
반응형

프로그래머스 연습문제 2단계

<< 전화번호 목록>>

- python3


문제 설명

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

 

코딩테스트 연습 - 전화번호 목록

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조��

programmers.co.kr

나의 풀이

# 채점결과 84.6 / 100.0
def solution(phone_book):
    for i in range(0,len(phone_book)-1):
        len_i = len(phone_book[i])
        for j in range(i+1, len(phone_book)):
            if phone_book[i] in phone_book[j][:len_i]:                
                return False
    return True
# 통과
def solution(phone_book):
    for i in phone_book: # 폰북에서 하나씩 출력
        for j in range(len(phone_book)): # 0부터 시작해서
            if i == phone_book[j]: # 같으면 pass하고
                continue
            elif i == phone_book[j][:len(i)]: # 접두사면
                return False # False
    return True # 아니면 True

 

다른사람 풀이

def solution(phoneBook):
    phoneBook = sorted(phoneBook) # 정렬

    for p1, p2 in zip(phoneBook, phoneBook[1:]):
        if p2.startswith(p1): # p2의 시작하는 문자가 p1이면 
            return False # False
    return True
def solution(phone_book):
    answer = True 
    hash_map = {}
    
    for phone_number in phone_book:
        hash_map[phone_number] = 1 # phone number를 딕셔너리 형태로 구현
        
    for phone_number in phone_book:
        temp = ""
        for number in phone_number: # 한글자씩 출력
            temp += number # 하나씩 더해줘서
            if temp in hash_map and temp != phone_number: # temp가 hasmap 안에 있으면서 phone_number(본인)은 아닐때 출력
                answer = False
    return answer

해쉬를 이용해서 푸는 문젠데 그냥 내맘대로 풂... 앞으론 어떤 방식으로 풀어야되는지 고민해보고 풀 것!

반응형