| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 코딩테스트
- frontend
- DFS
- 프론트앤드
- 네트워크
- 정렬
- 백준
- Python
- 코딩
- HTML기초
- 그리디
- CSS
- 정글
- c언어
- html
- Mini-React
- 프로그래머스
- 팀프로젝트
- 그래프
- 혼자 공부해서 개발까지
- Git
- js
- 해시
- 개발자
- 알고리즘 기초
- 크래프톤 정글
- 프론트엔드
- 알고리즘
- javascript
- react
Archives
- Today
- Total
민혁이의 IT스토리
[프로그래머스/JS] - 전화번호 목록 본문
문제 설명
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.
구조대 : 119
박준영 : 97 674 223
지영석 : 11 9552 4421
전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.
제한 사항
phone_book의 길이는 1 이상 1,000,000 이하입니다.
- 각 전화번호의 길이는 1 이상 20 이하입니다.
- 같은 전화번호가 중복해서 들어있지 않습니다.
출력 예

문제 요약
주어진 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하는 문제입니다.
- 접두어가 존재하는 경우: false 반환
- 접두어가 없는 경우: true 반환
해결 방법: 정렬(Sorting) 후 인접 요소 비교
이 문제의 핵심은 모든 번호를 일일이 비교하는 $O(n^2)$ 방식이 아니라, 정렬을 통해 효율성을 높이는 것입니다.
- 문자열 정렬: phone_book을 정렬하면 사전순(Lexicographical Order)으로 나열됩니다. 이때, 특정 번호의 접두어가 될 수 있는 번호는 반드시 그 번호의 바로 앞에 위치하게 됩니다.
- 예: ["12", "123", "88"] (정렬 후)
- 인접 요소 비교: 반복문을 통해 현재 요소(phone_book[i])가 다음 요소(phone_book[i+1])의 시작 부분과 일치하는지 startsWith() 메서드로 확인합니다.
- 효율성: 이 방식은 정렬에 O(n \log n), 비교에 O(n)이 소요되어 효율성 테스트를 가볍게 통과할 수 있습니다.
제출 코드
function solution(phone_book) {
phone_book.sort();
for (let i = 0; i < phone_book.length - 1; i++) {
if (phone_book[i + 1].startsWith(phone_book[i])) {
return false;
}
}
return true;
}'알고리즘 > 코딩테스트' 카테고리의 다른 글
| [프로그래머스/JS] - H-Index (0) | 2026.04.28 |
|---|---|
| [프로그래머스/JS] - 체육복 (0) | 2026.04.27 |
| [프로그래머스/JS] - 포켓몬 (0) | 2026.04.22 |
| [프로그래머스/JS] - 완주하지 못한 선수 (0) | 2026.04.21 |
| [백준 2178] 미로 탐색 Python (0) | 2026.02.04 |
