[Lv.2] 전화번호 목록 (JS)

hoheesu·2025년 7월 29일

알고리즘

목록 보기
5/5
post-thumbnail

...

문제 : 전화번호 목록

📘 문제

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

전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.

제한사항

phone_book의 길이는 1 이상 1,000,000 이하입니다.
각 전화번호의 길이는 1 이상 20 이하입니다.
같은 전화번호가 중복해서 들어있지 않습니다.

💡 접근방식

  1. 문자열을 정렬
    문자열을 정렬하면 "119", "1195524421", "97674223" 처럼 접두어 관계가 있는 번호들이 서로 인접하게 정렬될 것이다.
  2. 이웃한 두 개를 비교 (현재 번호 vs 다음 번호)

🔎 해결 코드

하핳^^ 이건 잘푼 코드가 맞는 것 같다 ㅋㅋㅋㅋㅋㅋㅋ
문제를 풀고 나서 해설을 보니 나랑 다른 코드는
if (phone_book[i + l].startsWith(phone_book[i] ) ) 이부분 이었다. 나는 진짜 살다살다 startsWith라는 메서드를 본 적이 없었는데,,, 뭐 오늘 봤고, 이제 알았으면 되는거지!! 앞으로 startWith 와 같이 몰랐던 메서드들을 잘 사용하면 Javascript로도 알고리즘을 더 잘 해결할 수 있을 것 같다는 생각이 들었다!

사실 숫자로 된 문자열을 sort하면 정렬 방식이 숫자크기가 아닌, string순서로 된다는 것을 혼자 생각하고 난 천재야 하면서 신나했는데 기본으로 다들 쓰는 것 같아서 아쉬웠지만 그래도 어쨌든 적어도 다른 사람들과 같은 사고방식을 했다는 것 만으로도 충분히 뿌듯했다~

function solution(phone_book) {
    const new_pb = phone_book.sort();
    for (let i = 0; i < new_pb.length - 1; i++) {
        if (new_pb[i] === new_pb[i + 1].slice(0, new_pb[i].length)) {
            return false;
        }
    }
    return true;
}
profile
🤔👏💡👨🏻‍💻🤯😇

0개의 댓글