몸과 마음이 건전한 SW 개발자

프로그래머스 [Lv. 2] 전화번호 목록 {언어 : JavaScript} 본문

알고리즘

프로그래머스 [Lv. 2] 전화번호 목록 {언어 : JavaScript}

스위태니 2024. 3. 7. 15:43

문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

정답 코드

function solution(phone_book) {
    const pbDict = {};
    for (const pn of phone_book) {
        pbDict[pn] = 1
    }
    let answer = true;
    for (const pn of phone_book) {
        let isValid = true;
        const lenPn = pn.length;
        const currentList = [];
        for (let i = 0; i < lenPn-1; i++) {
            currentList.push(pn[i]);
            const currentN = currentList.join("");
            if (pbDict[currentN] === 1) {
                isValid = false;
                break;
            };  
        };
        if (isValid === false) {
            answer = false;
            break;
        };
    };
    return answer;
}

풀이 방법

  1. 모든 번호를 딕셔너리에 넣는다.
  2. 현재 번호보다 길이가 1 작은 부분 까지 탐색하면서 딕셔너리에 있는지 확인한다.
    1. 있는 경우 접두사가 딕셔너리에 있다는 말이므로 멈추고 isValid를 false로 바꾼다.
    2. 상위 반복문도 isValid를 통해 확인한후 false인 경우 멈춘다.
  3. 반복이 끝나고 answer를 출력한다.

느낀점

  • 이런 문제는 껌이라고 생각하지만 더 간결하고 쉽게 풀고 싶다.