[Programmers/JAVA] 전화번호 목록

2023. 2. 23. 20:15자바/프로그래머스

내 코드

import java.util.*;
class Solution {
    public boolean solution(String[] phone_book) {
        boolean answer=true;
        
        //순서대로 정렬시, 다음 문자열이 제일 겹치는거임!
        Arrays.sort(phone_book);
        
        //hash문제라서 사용해봄.
        HashSet<String> set=new HashSet<>();

        for(int i=0; i<phone_book.length-1; i++) {
            set.add(phone_book[i]);
            if(phone_book[i].length()<phone_book[i+1].length()) {
                //다음 문자열을 현재 문자열의 길이만큼 자름.
                if(set.contains(phone_book[i+1].substring(0, phone_book[i].length()))) {
                    return false;
                }
            };
        }
        return answer;
    }
}
import java.util.*;
class Solution {
    public boolean solution(String[] phone_book) {
        boolean answer=true;

        Arrays.sort(phone_book);
        
        //startsWith메소드 사용
        for(int i=0; i<phone_book.length-1; i++) {
            if(phone_book[i+1].startsWith(phone_book[i])) {
                return false;
            }
        }
        return answer;
    }
}

 

 

느낀점

hash문제라고 써있어서 hash를 사용해서 생각해봤는데 안사용하는게 더 깔끔한것같다. 작동 시간은 비슷비슷하다. 처음만들었을 때는 for문을 세번을 사용했다. 정답은 제대로 나왔지만 문제는 시간초과였고 for문을 계속해서 줄이는 방식으로 접근했다. 사실 첫번째방법도 hashset안쓰고 비교하면 되기하는데 hash문제라서 사용해봤다! 두번째 풀이는 다른 사람이 푼 것을 보고 startsWith이란 메소드가 있다는 걸 알게되어 바꿔봤다. 훨씬 깔끔해보지않는가?