[프로그래머스][Java] 전화번호 목록 (Lv.2) - 해시

박현아·2024년 11월 5일
0

programmers-java

목록 보기
26/35

👩‍💻 문제

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

🙋‍♀️ 답변

import java.util.*;

class Solution {
    public boolean solution(String[] phone_book) {
        
        Arrays.sort(phone_book); // 오름차순 정렬
                
        for (int i=0; i<phone_book.length -1; i++) {
            if (phone_book[i + 1].startsWith(phone_book[i])) {
                return false; // 접두사가 발견되면 false 반환
            }
        }
        
        return true;
    }
}

🤔

처음에 이렇게 ⬇️ 하니까 정확성 테스트는 다 통과했는데 효율성 테스트에서 실패가 떴다.

import java.util.*;

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

지금까지 효율성을 생각을 안 하고 풀었었는데 효율성까지 생각하면 더 어려울 것 같다 😱
<🙋‍♀️ 답변>에 쓴 코드는 효율성 테스트를 통과하긴 하는데 점수가........ 16.7점!! ㅎ.ㅎ

문제 테마가 <해시>니까 해시를 사용해서 풀어야되나보다.

import java.util.*;

class Solution {
    public boolean solution(String[] phone_book) {
        
        HashMap<String,Integer> map = new HashMap<>();
            
        for (String phone : phone_book) {
            map.put(phone, 1);
        }
        
        for (String phone : phone_book) {
            for (int i=1; i<phone.length(); i++) {
                String prefix = phone.substring(0,i);
                if(map.containsKey(prefix)) {
                    return false;
                }
            }
        }
        
        return true;
    }
}

근데 HashMap을 써서 풀었더니 똑같이 효율성이 16.7점이 나온다 😱.... 조언을 주실 분 환영합니다 🤗

0개의 댓글