function solution(phone_book) {
//문자열 정렬: 비슷한 것끼리(접두어 관계인 것끼리) 바로 옆에 붙게 됩니다.
//["119", "97674223", "1195524421"] => ["119", "1195524421", "97674223"]
phone_book.sort();
// 내 바로 뒷사람하고만 비교하면 됩니다. 마지막은 비교할 사람이 없으니 -1을 합니다.
for(let i=0; i<phone_book.length-1; i++){
//자바스크립트에는 문자열이 특정 문자로 시작하는지 검사하는 꿀 같은 함수가 있습니다.
//"1195524421".startsWith("119") → true
if(phone_book[i+1].startsWith(phone_book[i]))
return false
}
return true;
}
정석 Hash로 풀기
function solution(phone_book) {
// 1. 해시 맵(Hash Map) 생성
// 모든 전화번호를 Map에 키(Key)로 등록합니다.
// 값(Value)은 무엇이든 상관없으니 true로 둡니다.
const map = new Map();
for (const number of phone_book) {
map.set(number, true);
}
// 2. 모든 전화번호를 하나씩 꺼내서 접두어 검사
for (const number of phone_book) {
// 내 번호(number)를 한 글자씩 잘라보며 확인합니다.
// 예: number가 "1195"라면 -> "1", "11", "119" 순으로 자름
for (let i = 1; i < number.length; i++) {
const prefix = number.slice(0, i); // 접두어 생성
// 3. 잘라낸 접두어가 해시 맵에 실제로 존재하는 번호인가?
if (map.has(prefix)) {
return false; // 누군가 이 접두어를 번호로 쓰고 있다
}
}
}
return true; // 끝까지 겹치는 게 없으면 통과
}
반응형
'프론트엔드 개발자 > [코테] How it works, How to solve' 카테고리의 다른 글
| [JS] 프로그래머스 레벨1, 신규 아이디 추천 (0) | 2025.12.02 |
|---|