코딩테스트

[프로그래머스] 전화번호 목록 (JS)

여유로운 프론트엔드 개발자 2024. 8. 30. 21:47

문제

 

프로그래머스

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

programmers.co.kr

 

풀이

  (1) sort() 정렬 -> 문자열로 변환된 후 유니코드 순서로 정렬되기 때문에 비교 대상의 오른쪽 값만 비교하면 된다. 오른쪽 숫자가 본인의 숫자를 접두어로 갖지 못하면 다른 숫자들도 가질 수 없다.

  (2) 본인을 포함하고 있는지 여부는 startsWith 메서드를 사용한다.

  (3) 접두어를 갖는 값이 발견되면 break문으로 빠져나온다.

function solution(phone_book) {
    let answer = true;
    phone_book.sort();
    
    for(let i = 0; i < phone_book.length-1; i++) {
        for(let j = i+1; j < i+2; j++) {
            if(phone_book[j].startsWith(phone_book[i])) {
                answer = false;
                break;
            }
        }
        if(!answer) break;
    }
    
    return answer;
}

 

결론

처음에는 모든 숫자를 비교하려 했고 시간 초과가 날까봐 걱정했다.

유니코드 순서로 정렬하여 오른쪽 값만 비교하면 됐기 때문에 시간을 줄일 수 있었다.