DM Log

[해시] 전화번호 목록 - Python / JavaScript 본문

알고리즘/프로그래머스

[해시] 전화번호 목록 - Python / JavaScript

Dev. Dong 2025. 7. 7. 21:33

문제 링크 - https://school.programmers.co.kr/learn/courses/30/lessons/42577

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

[문제 간단 요약]

1. 어떤 전화번호가 다른 전화번호의 접두어인 경우가 있는지 판별

2. 접두어 관계가 있으면 false, 없으면 true

[문제 해결 방안]

1. 정렬 + 인접 비교

 

  • phone_book을 오름차순 정렬
  • 정렬된 배열에서 i번 전화번호가 i+1번 전화번호의 접두어인지 확인

 

2. 해시 (Set) 이용

 

[문제 해결 코드 - python]

def solution(phone_book):
    answer = True
    phone_book.sort()
    for i in range(len(phone_book)-1):
        if phone_book[i] == phone_book[i+1][:len(phone_book[i])]:
            answer=False
    return answer

def solution(phone_book):
    phone = {k:0 for k in phone_book}
    for key in phone.keys():
        temp = ""
        for number in key:
            temp += number
            if temp == key: continue
            if temp in phone: return False       
    return True

 

[문제 해결 코드 - javascript]

function solution(phone_book) {
    const hash_number = new Set(phone_book)
    
    for (const number of phone_book) {
        for (let i=0; i < number.length; i++) {
            let pre = number.slice(0,i)
            if (hash_number.has(pre)) {
                return false
            }
        }
    }
    return true
}