메모/알고리즘의 뇌

[알고리즘문제풀이/JAVA]#2 전화번호 목록

음료요정 2021. 6. 25. 00:25

 

1. 두번째 레벨 문제는 https://programmers.co.kr/learn/courses/30/lessons/42577 

 

코딩테스트 연습 - 전화번호 목록

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조

programmers.co.kr

문자열 배열로 전화번호가 입력되고, 다른번호의 접두어가 되는 번호가 있는지 찾는 문제이다

해쉬문제 중 두번째 문제로 푸는 방식이라고하는데, 몇십분동안 잘 이해가 가지 않았다

 

 

2. 나의 코드 

사실상 인터넷에서 풀이를 보고 한 것이지만, 적어둔다

set.contains함수가 쿼리의 like검색과 유사한것이라고 생각했기때문에 이해가 되지않았던 것이다

substring을 한 element는 아래 예제에서의  1195524421 였고 

그것의 앞 11 을 다른 HashSet들과 비교했던것이다.

크게 헷갈릴뻔했으나 이해하고 넘어가서 다행이다 

예제 : ["119", "97674223", "1195524421"]
import java.util.*;
class Solution {
    public boolean solution(String[] phone_book) {
       
        List<String> list = Arrays.asList(phone_book);
        HashSet<String> set = new HashSet<>(list);

        for(String element : set)
            for(int i = 1; i < element.length(); i++){
                if(set.contains(element.substring(0,i))) {
                    return false;
                }
            }
        return true;
    }
}

 

3. Hash에 대하여

HashMap은 키와 값을 가지며 해싱(hashing) 기법으로 데이터를 저장한다.

데이터의 검색이 빠르다는 장점이있다.

key값은 유일해야하며 새로 저장되는 값이 존재하던 키값이면 value값을 업데이트를 한다.

 

HashMap 클래스에는 Entry[] table 이라는 배열있는데 이곳에 저장된다.

키값으로 그룹핑해 분류하여 캐비넷에 저장하는것과 비슷하다.

 

Hash를 사용하는 클래스는 3가지가 있다

1. HashTable

2. HashMap

3. HashSet