프로그래밍/알고리즘

프로그래머스/해시/전화번호 목록

Doublsb 2021. 8. 6. 04:24

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

 

풀이

- 119, 11 9552 4421이 있으면, 후자 접두에 119가 들어있으므로 false

- 접두어가 하나라도 존재한다면 false를 리턴하면 됨

 

- 119라면, 1, 11를 해시에 등록해두면 되는 거 아니냐

- C#을 지원하지 않아서 Java로만 풀었음

 

Java

import java.util.HashSet;

class Solution {
    public boolean solution(String[] phone_book) {
        
        HashSet<String> hash = new HashSet<String>();
        
        for(String e : phone_book)
        {
            for(int i=1; i<e.length(); i++)
            {
                hash.add(e.substring(0, i));
            }
        }
        
        for(String e : phone_book){
            if(hash.contains(e)) return false;
        }
        
        return true;
    }
}

 

결과

정확성 83.3 / 효율성 16.7 / 통과

 

피드백

처음에는 HashSet의 존재가 있는 줄 모르고, HashMap의 Value에 Int를 우겨넣어서 풀었다.
아무튼 키만 필요한 문제이므로, HashSet으로 다시 풀었더니, 소소한 효율성 테스트의 성능 향상을 보았음.

반응형