seunghyun Note
[프로그래머스] 전화번호 목록 (해시) with JS 본문
728x90
반응형
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42577
문제 풀이
고득점 키트에 해시가 있어서 문제를 해결해보려고 했다.
1. 해시를 담을 테이블을 생성한다.
2. phone_book의 배열값(문자열)을 index에 넣고 true로 값을 채운다.
3. 다시 문자열 배열을 순회시키면서 slice를 통해 [1,2,3] 이면 [1] , [1,2]까지만 pre로 넣어서 테이블에 있다면
return false를 하고 최종적으로 없으면 return true를 반환한다.
function solution(phone_book) {
let has = {};
for (let value of phone_book) {
has[value] = true;
}
for (let value of phone_book) {
for (let i = 1; i < value.length; i++) {
let pre = value.slice(0, i);
if (has[pre]) return false;
}
}
return true;
}
효율적으로 2중 for문이라 좋아보이지는 않는다.
다른 방법을 찾다가 sort를 통한 문제 해결 방식이 있었다.
1. 문자열을 가지고 있는 배열의 크기가 다 다르기때문에 작은 순으로 정렬합니다.
2. 비교해주기
function solution(phone_book) {
phone_book.sort(); // 전화번호 리스트를 정렬합니다.
for (let i = 0; i < phone_book.length - 1; i++) {
// 현재 번호와 다음 번호의 시작 부분이 같으면 접두어이므로 false를 반환합니다.
if (phone_book[i] === phone_book[i + 1].substring(0, phone_book[i].length)) {
return false;
}
}
return true; // 접두어가 없는 경우 true를 반환합니다.
}
728x90
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[백준] 28278번 : 스택 2 (스택 공부 부수기) with JS (0) | 2024.01.18 |
---|---|
[프로그래머스] 기능개발(스택 공부 부수기) with JS (1) | 2024.01.17 |
[백준] 2941번 :크로아티아 알파벳 with JS (0) | 2024.01.16 |
[백준] 10988번 : 팰린드롬인지 확인하기 with JS (0) | 2024.01.16 |
[백준] 1920번 : 수 찾기 with JS (0) | 2024.01.16 |