💡 유형: 해시

 

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/42577

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

구현

어떤 번호가 다른 번호의 접두어인 경우가 있으면 false, 아니면 true

접두어 => 포함하고 있고, 인덱스가 0이여야함

 

1. phone_book을 순회하면서, 한 번호가 다른 번호들에 포함되는지 확인한다.

2. 포함된다면, 인덱스가 0인지 확인한다. 

=> 이렇게 생각했는데 MDN 문서를 보니 startsWith() 라는 메서드가 있었다!

 

풀이

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;
}

 

처음에 i를 phone_book.length 까지 순회하게 하여 undefined 오류가 났다.. 맨 마지막은 i+1의 값이 존재하지 않기 때문이다.

 

 

 

sort 함수는 원 배열이 정렬된다! (복사본이 생성되는 것 아님)

 

계속 해시 유형 문제를 풀고 있기 때문에 개념을 정리해보았다.

🥳 해시 테이블(Hash Table)이란?
키와 값을 받아 키를 해싱(Hashing)하여 나온 index값을 저장하는 선형 자료구조
삽입은 O(1)이며 키를 알고 있다면 삭제, 탐색도 O(1)로 수행한다.

 

해시 테이블에 대한 개념을 잘 몰랐었는데, 나도 모르게 배열과 객체를 통해 해시 테이블을 사용하고 있었다. 

자바스크립트에서는 배열(또는 객체)를 생성하고 바로 key를 지정해 값에 접근할 수 있기 때문이다.

 

배열로 구현하는 방법 외에 객체, Map, Set을 사용하는 방법이 있다.

아래의 블로그에 해당 방법이 잘 정리되어있다.

 

https://velog.io/@93minki/JavaScript-%ED%95%B4%EC%8B%9C-%ED%85%8C%EC%9D%B4%EB%B8%94Hash-Table

 

JavaScript 해시 테이블(Hash Table)

 해시 함수를 사용해서 key를 고유 index로 변환해서 해시 테이블에 값을 저장한다. index를 만들기 위해서 해시 함수를 사용한다. 해시 테이블에는 문제점이 있는데, 해시 함수를 사용해서 생성된

velog.io

 

 

+ Recent posts