알고리즘 풀이/프로그래머스

프로그래머스 - 전화번호 목록 (해시)

배게 2019. 11. 30. 10:29
728x90

문제의 조건인 접두어의 경우를 간과했고, startsWith를 잊고 있었다. 


hash, indexOf를 활용해서 일단 다시 풀어보았다. 


hash쓴게 마지막 효율성에서 살짝 더 느리다. Arrays.sort때문인듯 햇는데 둘다 사용햇엇다 


왜때문인지 모르지만 걍 패스


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    // 문제에서 요구하는 Hash를 활용하여 만든 케이스
    public boolean solution2(String[] phone_book) {
        boolean answer = true;
        HashSet<String> hs = new HashSet<>();
 
        Arrays.sort(phone_book, (a, b) -> Integer.compare(a.length(), b.length()));
 
        for (String pb : phone_book) {
            // System.out.println(pb);
            hs.add(pb);
        }
 
        for (String pb : phone_book) {
            hs.remove(pb);
            for (String hsString : hs) {
                if (hsString.indexOf(pb) == 0)
                    return false;
            }
        }
 
        return answer;
    }
    
    // 접두어라는 문제의 조건을 간과햇다..
    // startsWith라는 메소드를 잊고 있었다..
    public boolean solution1(String[] phone_book) {
        boolean answer = true;
        HashSet<String> hs = new HashSet<>();
 
        Arrays.sort(phone_book, (a, b) -> Integer.compare(a.length(), b.length()));
 
        int leng = phone_book.length;
        for (int i = 0; i < leng; i++) {
            for (int j = i + 1; j < leng; j++) {
                if (phone_book[j].startsWith(phone_book[i]))
                    return false;
            }
        }
 
        return answer;
    }
cs