ㅇ 문제설명
문제를 보고 아ㅋㅋ 개쉽네ㅋㅋ 이랬다가 바로 효율성 테스트 실패!
내가 처음 푼 방법은 이중 반복문을 사용해, 자바의 String의 stratswith() 메서드를 사용했다.
그게 패착요인일줄은...사실 어느정도 예상했다.
ㅇ 내가 처음 푼 방법
class Solution {
public boolean solution(String[] phone_book) {
for(int i = 0; i < phone_book.length; i++){
for(int j = 0; j < phone_book.length; j++){
if(i == j){
continue;
}
if(phone_book[i].startsWith(phone_book[j])){
return false;
}
}
}
return true;
}
}
이렇게 풀었다가 반복문을 하나만 써야할거같아서, 생각을 해보다가 sort한뒤 앞뒤로만 비교하면 될거같아서 바로 수정했다.
내 예상이 맞았다.
ㅇ 수정한 코드
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;
}
}
return true;
}
}
훨씬 간결해졌다.
phone_book은 문자열배열이지만 전화번호 목록이기 때문에 숫자로만 이뤄져있다.
String[] book2 = {"119", "97674223", "1195524421","960231123", "1283839", "10094", "44345"};
book2가 이렇게 이뤄질때, Arrays.sort를 사용하면
[10094, 119, 1195524421, 1283839, 44345, 960231123, 97674223]
이렇게 나온다. 앞자리 비교하고, 다음자리 비교하교...계속 이런식이라 지금 문제에 사용하기 매우 좋다.