프로그래머스 - 전화번호 목록
https://school.programmers.co.kr/learn/courses/30/lessons/42577
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점이 나온다.
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 그대로 올려본다.