[PGS] 42577. 전화번호 목록

레몬커드요거트·2026년 4월 29일

코딩테스트준비

목록 보기
57/66
post-thumbnail

정렬

/*
    한 번호가 다른 번호의 접두어인 경우가 있는지 확인
    구조대 전화번호는 영석이의 전화번호의 접두사
    구조대 : 119
    박준영 : 9674223
    지영석 : 1195524421
*/

function solution(phone_book) {
    phone_book.sort();
    // console.log(phone_book);
    var answer = true;
    for (let i = 0; i < phone_book.length - 1; i++) {
        if (phone_book[i + 1].startsWith(phone_book[i])) {
            answer = false;
            break;
        }
    }

    return answer;
}

[ '119', '1195524421', '97674223' ]

다음과 같이 문자열 정렬하여, 탐색할 값의 다음의 값이 탐색할 값으로 시작하는지 확인.

시작하는 경우 바로 false리턴 후 break


해쉬

정렬이 "옆에 있는 놈과 비교"라면, 해시는 "내가 가진 모든 조각들이 전화번호부(명단)에 있는지 확인"하는 방식

  1. 준비 단계: phone_set이라는 주머니에 "119""119552"를 미리 다 넣어둡니다.
  2. 첫 번째 번호("119") 검사:
    • 글자 수가 3개니까, i는 0부터 1까지(즉, "1", "11")만 확인합니다.
    • prefix"1"일 때: 주머니에 "1"이 있니? → 없음.
    • prefix"11"일 때: 주머니에 "11"이 있니? → 없음.
    • (자기 자신인 "119"는 검사 안 함)
  3. 두 번째 번호("119552") 검사:
    • prefix"1"일 때: 없음.
    • prefix"11"일 때: 없음.
    • prefix"119"일 때: 주머니에 "119" 있니? → 어! 아까 넣어둔 "119"가 있네!
    • 결과: "119""119552"의 접두어이므로 false 반환.
function solution(phone_book) {
    const phone_set = new Set(phone_book);
    console.log(phone_set);
    for (const number of phone_book) {
        let prefix = ""; // 조각을 합칠 변수

        // 마지막 글자 직전까지만 확인 (자기 자신 제외)
        for (let i = 0; i < number.length - 1; i++) {
            prefix += number[i];

            if (phone_set.has(prefix)) {
                return false;
            }
        }
    }
    return true;
}
profile
비요뜨 최고~

0개의 댓글