본문 바로가기

알고리즘 문제

프로그래머스 전화번호 목록

dict를 쓰라는데 고민해봐도 잘 안떠올라서 되는대로 풀었다.

다른 사람 풀이를 보니까 startswith()를 사용해서 비교하기도 했다.

def solution(phone_book):
    pb_len = len(phone_book)
    phone_book.sort()
    for i in range(pb_len):
        phone_book[i] = str(phone_book[i])

    for i in range(pb_len):
        for j in range(i+1, pb_len):
            std_num_len = len(phone_book[i])
            if std_num_len > len(phone_book[j]):
                continue
            else:
                if phone_book[i] == phone_book[j][:std_num_len]:
                    return False
    return True

dict를 사용한 방법은 value는 아무 값이어도 상관 없는 전화번호를 key로 갖는 dict를 만들고 전화번호부를 돌면서 특정 전화번호를 문자 하나하나 temp에 이어 붙이면서 dict의 key와 일치하는 게 있는지 찾는 것이다. 그리고 temp는 현재의 전화번호와 일치하면 안된다. 접두어를 찾아야하는데 완전 일치하면 접두어가 아니므로.

def solution(phone_book):
    answer = True
    hash_map = {}
    for phone_number in phone_book:
        hash_map[phone_number] = 1
    for phone_number in phone_book:
        temp = ""
        for number in phone_number:
            temp += number
            if temp in hash_map and temp != phone_number:
                answer = False
    return answer

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

 

코딩테스트 연습 - 전화번호 목록 | 프로그래머스

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조대 : 119 박준영 : 97 674 223 지영석 : 11 9552 4421 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 r

programmers.co.kr