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점이 나온다 😱.... 조언을 주실 분 환영합니다 🤗