Computer Engineering/알고리즘 테스트

프로그래머스 코딩테스트 문제: 전화번호 목록

말하는호구마 2020. 3. 10. 18:14

프로그래머스 코딩테스트 level2에 해당하는 hash문제이다.

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

 

나는 hash문제라고 떡하니 적혀있어서 hash로 풀려고 노력했다.

다른사람들의 답안을 보니 그냥 순수배열로 푼 사람들이 많았다. 내가 생각하지 못한 함수들을 많이들 쓴 것 같았다.

 

 

 

 

 

 

import java.util.*;
class Solution {
    public boolean solution(String[] phone_book) {
        boolean answer = true;
        HashMap<String,Integer> hash=new HashMap<String,Integer>();
        for(int i=0;i<phone_book.length;i++){
            hash.put(phone_book[i],phone_book[i].length());
        }
        for(int i=0;i<hash.size()-1;i++){
            for(int j=i+1;j<hash.size();j++){
                String min=phone_book[i];
                String max=phone_book[j];
                if(hash.get(min)>hash.get(max)){
                    min=phone_book[j];
                    max=phone_book[i];
                }
                if(min.equals(max.substring(0,hash.get(min)))){
                    answer=false;
                    break;
                }
            }
            if(answer==false)
                break;
        }
        return answer;
    }
}

hash를 써서 배열만을 쓴 답보다 길이가 길다.

 

hah의 key는 전화번호를 넣고 value에는 그 전화번호의 길이를 담았다. 

 

어느 번호의 접두어가 되려면 그 번호보다는 길이가 짧아야한다. 

또한 접두어임을 알고 그 접두어의 길이를 안다면 비교하고자 하는 번호를 접두어의 길이만큼 잘라서 비교하면 될 것이라고 생각했다. 

 

 

 

hash문제를 풀때는 어떤 값을 key,value로 설정할 것인지 잘 고민해보고 시작하는게 중요한 것 같다. 

또한 내가 원하는 답을 풀었다면 for문을 꼭 break시키자!!(처음에 이걸 안해서 효율성 테스트에 실패했다)