• TOC {:toc}

이 글은 프로그래머스의 42577번 문제를 JavaScript로 풀이한 것을 모아놓은 글입니다.

일종의 연습 기록이며 제가 정답을 받은 코드와 참고할만한 다른 코드를 같이 기록합니다. 필요한 경우 코드에 대한 해설을 기록합니다만 코드는 통과했어도 해설은 틀릴 수 있기 때문에 가볍게 참고해주시길 부탁드립니다. 피드백은 편하신 방법으로 자유롭게 주시면 감사하겠습니다.

2023.11.14

정확성 테스트

테스트 통과 시간 메모리
테스트 1 통과 0.05ms 33.6MB
테스트 2 통과 0.05ms 32.8MB
테스트 3 통과 0.05ms 32.9MB
테스트 4 통과 0.04ms 33.5MB
테스트 5 통과 0.05ms 33.4MB
테스트 6 통과 0.05ms 33.5MB
테스트 7 통과 0.05ms 33.6MB
테스트 8 통과 0.05ms 33.5MB
테스트 9 통과 0.05ms 33.6MB
테스트 10 통과 0.06ms 33.4MB
테스트 11 통과 0.06ms 33.5MB
테스트 12 통과 0.05ms 33.5MB
테스트 13 통과 0.05ms 33.4MB
테스트 14 통과 0.45ms 33.5MB
테스트 15 통과 0.58ms 33.7MB
테스트 16 통과 0.62ms 33.7MB
테스트 17 통과 0.80ms 33.8MB
테스트 18 통과 1.82ms 33.9MB
테스트 19 통과 1.01ms 34MB
테스트 20 통과 1.54ms 33.9MB

효율성 테스트

테스트 통과 시간 메모리
테스트 1 통과 3.86ms 34.9MB
테스트 2 통과 3.87ms 34.8MB
테스트 3 통과 151.92ms 78.4MB
테스트 4 통과 117.43ms 74.4MB
단계 시작 시각 끝난 시각 걸린 시간
풀이 생각 18:52:22 18:54:12
코딩 23:25:04 23:44:47
function solution(phone_book) {
    phone_book.sort();
    return phone_book.some((num, i) => num === phone_book[i + 1]?.slice(0, num.length))
        ? false
        : true;
}

아이디어 & 풀이

전화번호를 sort로 정렬하면 특정 전화번호와 해당 전화번호를 접두사로 갖는 전화번호는 인접하게 존재하게 된다. 이를 이용해 인접한 두 전화번호를 비교해 한 전화번호가 다른 전화번호의 접두사인지 확인한다.

  • 접두사로 쓰일 더 짧은 전화번호가 앞에 존재하므로 뒷 전화번호를 앞 전화번호의 길이만큼 잘라서 비교한다.
  • some 메소드를 사용해 다른 전화번호를 접두사로 갖는 전화번호가 하나라도 존재하면 false를 반환하도록 한다.