해당 알고리즘 자료는 제가 직접 푼 것도 있지만 다른 분들의 풀이과의 비교를 통해 더 나은 알고리즘을 공부하기 위해 정리한 것들입니다.
https://programmers.co.kr/learn/courses/30/lessons/42577
풀이 1. (초급) - 이중 for문을 이용하여 조건 탐색
// 속도는 빠르나 이중 for문으로 인한 복잡도가 심한 것 같다.
import java.util.Arrays;
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
for (int i = 0; i < phone_book.length-1; i++) {
for (int j = i+1; j < phone_book.length; j++) {
if(phone_book[j].startsWith(phone_book[i]) || phone_book[i].startsWith(phone_book[j])) {
answer = false;
break;
}
}
if(!answer) break;
}
return answer;
}
}
풀이 2. (중급) - 정렬을 통해 앞 뒤의 문자를 비교
// 풀이 1보단 속도는 느리나 정렬를 통해 앞 뒤 문자만 비교함으로써 체크가 가능하다.
import java.util.Arrays;
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
String[] tmap = phone_book;
Arrays.sort(tmap);
for(int i=0 ; i < tmap.length -1 ; i++) {
if( tmap[i+1].startsWith(tmap[i]) ) {
return false;
}
}
return answer;
}
}