Level 2️⃣ - 전화번호 목록
2024. 4. 5. 14:25ㆍ알고리즘/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/42577
🚀해시를 활용한 풀이
문제의 요구사항은 어떤 번호가 다른 번호의 접두어가 될 수 있는지 확인하는 것이다. 조금 어렵게 표현하면 어떤 번호가 통째로 다른 번호의 부분이 된다는 것이다.
그렇다면 주어진 모든 번호가 접두어가 될 수 있기에 해시를 통해 정리를 하고, 각각의 번호들마다 접두어를 만들어보면서 다른 번호가 해당 번호의 접두어가 될 수 있는지 확인하면 된다.
말이 조금 어려운데 코드로 보면 더 이해가 쉽다.
function solution(phone_book) {
const h = new Map();
phone_book.forEach((elem)=> h.set(elem, true));
for(const n of phone_book){
let prefix = "";
for(const d of n){
prefix += d;
if(h.has(prefix) && prefix !== n){
return false;
}
}
}
return true;
}
이때 접두어가 자기 자신이 되는 경우는 제외해야하므로 prefix !== n 조건을 추가해야한다.
🚀Sort를 활용한 풀이
Sort는 콜백함수를 정의하지 않을 시, 문자로 변환하고 유니코드 포인트 기반으로 정렬을 한다.
그러니까 사전식으로 정렬이 된다는 말인데, 이 특징을 이용해서 더 짧고 간결한 구현이 가능하다.
어차피 어떤 단어가 다른 단어의 접두사가 된다는 것은 그 단어보다 사전적으로 앞에 위치하게 된다.
따라서 정렬 후에 앞의 단어가 뒤의 단어의 접두어가 되는지 확인하면 된다.
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;
}
startsWith는 인자로 들어간 문자열로 해당 문자열이 시작된다면 true, 아니면 false를 반환한다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Level 2️⃣ - 롤케이크 자르기 (1) | 2024.04.07 |
---|---|
Level 2️⃣ - 방문길이 (0) | 2024.04.07 |
Level 2️⃣ - 튜플 (0) | 2024.04.03 |
Level 2️⃣ - 기능개발 (0) | 2024.04.03 |
Level 2️⃣ - H-Index (0) | 2024.04.03 |