[Programmers]-전화번호 목록(해시)

문제

“코딩테스트 고득점 Kit - 해시” 문제이다.

코드

import java.util.HashMap;

class Solution {
    public boolean solution(String[] phone_book) {

        HashMap<String, Integer> hashMap = new HashMap<>();

        for(String data : phone_book) hashMap.put(data, 0);

        for(String key : hashMap.keySet()){

            for(int i=0;i<key.length()-1;i++){

                if(hashMap.containsKey(key.substring(0,i+1))) return false;
            }
        }
        return true;
    }
}

코드 설명

처음에는 starsWith로 풀어보려했는데 O(n^2)가 나오는 알고리즘덕에 풀리지 않는다.

어떤번호가 다른번호의 접두어일 경우가 false인데 이것을 역으로 생각한다.

어떤번호를 쪼개어 포함되어있는지 확인하게 한다.

요약

  • keySet(), containsKey();