/*
한 번호가 다른 번호의 접두어인 경우가 있는지 확인
구조대 전화번호는 영석이의 전화번호의 접두사
구조대 : 119
박준영 : 9674223
지영석 : 1195524421
*/
function solution(phone_book) {
phone_book.sort();
// console.log(phone_book);
var answer = true;
for (let i = 0; i < phone_book.length - 1; i++) {
if (phone_book[i + 1].startsWith(phone_book[i])) {
answer = false;
break;
}
}
return answer;
}
[ '119', '1195524421', '97674223' ]
다음과 같이 문자열 정렬하여, 탐색할 값의 다음의 값이 탐색할 값으로 시작하는지 확인.
시작하는 경우 바로 false리턴 후 break
정렬이 "옆에 있는 놈과 비교"라면, 해시는 "내가 가진 모든 조각들이 전화번호부(명단)에 있는지 확인"하는 방식
phone_set이라는 주머니에 "119"와 "119552"를 미리 다 넣어둡니다."119") 검사:i는 0부터 1까지(즉, "1", "11")만 확인합니다.prefix가 "1"일 때: 주머니에 "1"이 있니? → 없음.prefix가 "11"일 때: 주머니에 "11"이 있니? → 없음."119"는 검사 안 함)"119552") 검사:prefix가 "1"일 때: 없음.prefix가 "11"일 때: 없음.prefix가 "119"일 때: 주머니에 "119" 있니? → 어! 아까 넣어둔 "119"가 있네!"119"는 "119552"의 접두어이므로 false 반환.function solution(phone_book) {
const phone_set = new Set(phone_book);
console.log(phone_set);
for (const number of phone_book) {
let prefix = ""; // 조각을 합칠 변수
// 마지막 글자 직전까지만 확인 (자기 자신 제외)
for (let i = 0; i < number.length - 1; i++) {
prefix += number[i];
if (phone_set.has(prefix)) {
return false;
}
}
}
return true;
}