[Java] 프로그래머스 Hash - 전화번호 목록 (Lv2)

JuhyunKim·2022년 11월 3일
0

코딩테스트

목록 보기
3/8

프로그래머스 - 전화번호 목록
https://school.programmers.co.kr/learn/courses/30/lessons/42577


전화번호 목록

Arrays를 이용한 풀이

import java.util.Arrays;

class Solution {
    public boolean solution(String[] phone_book) {
        boolean answer = true;
        Arrays.sort(phone_book);
        for(int i=0; i<phone_book.length-1; ++i){
            if(phone_book[i+1].startsWith(phone_book[i])) {
                answer = false;
                break;
            }
        }
        return answer;
    }
}

이렇게 풀어도 효율성, 정확도 100점이 나온다.

HashSet을 이용한 풀이

import java.util.Set;
import java.util.HashSet;

class Solution {
    public boolean solution(String[] phone_book) {
        Set<String> set = new HashSet<>();
        for(String phone : phone_book) set.add(phone);

        for(String phone : phone_book){
            for (int j=0; j<phone.length(); j++) {
                if (set.contains(phone.substring(0, j))) return false;
            }
        }

        return true;
    }
}

아무래도 Array의 sort()함수가 효율성을 꽤나 잡아먹는다고 알고있어는데 그 때문인지 HashSet 쪽이 효율성 테스트 결과가 조금 더 빨랐다.
그리고 왜인지는 모르겠지만.. 더 효율적인 방법이 있나 찾아보다 보니까 HashMap을 사용해서 containsKey로 구분하는 경우가 있던데 의외로 많은 사람들이 그 풀이를 사용해서 놀랐다.
value는 사용하지 않는데 굳이 map을 써야 할 필요는 없을 것 같고, 돌려보니 큰 차이는 없었지만 HashSet쪽이 조금 더 빠르기는 하더라.
애초에 key-value 속성을 사용하지 않을 거면 굳이 map을 쓰지 않는 쪽이 맞는 것 같아서 HashSet 그대로 올려본다.

0개의 댓글