## 🌟 문제
[코딩테스트 연습 - 전화번호 목록 \| 프로그래머스 스쿨](https://school.programmers.co.kr/learn/courses/30/lessons/42577)
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하기
## 🌟 풀이
phone_book의 최대 길이가 1,000,000이기 때문에 이중 for문으로 모든 쌍을 비교하면 시간 초과가 발생할 것이다. 그래서 Set을 활용해서 접두어 존재 여부를 O(1)에 확인하는 방식을 사용했다.
1. 모든 전화번호의 접두어들(자기 자신 제외)을 Set에 저장한다.
2. 전화번호 목록을 다시 순회하면서, 해당 번호가 Set에 있는지 확인한다.
3. Set에 있다면 그 번호는 다른 번호의 접두어라는 의미이므로 false를 반환한다.
```javascript
function solution(phone_book) {
const numberSet = new Set();
for (const number of phone_book) {
// 같은 전화번호가 중복해서 들어있지 않으므로 끝번호를 제외한 부분문자열만 구해준다.
for (let len = 1; len < number.length; len++) {
numberSet.add(number.substring(0, len))
}
}
for (const number of phone_book) {
if (numberSet.has(number)) {
return false;
}
}
return true;
}
```