더 좋은 문제 풀이가 있거나 궁금하신 점이 있다면 편하게 댓글 남겨주세요!
String을 활용한 방법1과 HashSet을 활용한 방법2을 비교해보겠습니다.
[String을 사용한 방법1] 메모리: 113 MB, 시간: 346.65 ms
[HashSet을 사용한 방법2] 메모리: 138 MB, 시간: 212.58 ms
위를 통해 HashSet의 성능이 String을 사용한 것보다 좋다는 것을 알 수 있었습니다.
저는 추가적으로 HashMap을 사용한 방식과도 비교를 해보았습니다. 처음에는 HashMap이 value 부분을 추가적으로 사용하여 HashSet 보다 성능이 좋지 않을 것이라고 생각했습니다. 그러나 더 찾아보니 HashSet이 객체 자체를 저장하고 내부적으로 HashMap을 사용하기 때문에 HashMap이 HashSet보다 속도가 더 빠르다는 사실을 알게 되었습니다.
HashMap vs HashSet 비교
참고자료1
참고자료2
다음으로는 문제에 사용된 startsWith() 메소드와 함께 java의 String 관련 함수를 정리해보겠습니다.
boolean startsWith(String prefix)
String str1 = "자바 스프링";
System.out.println(str1.startsWith("자바")); //true
String str2 = " 자바 스프링";
System.out.println(str2.startsWith("자바")); //false
boolean endsWith(String suffix)
String str3 = "자바 스프링";
System.out.println(str3.endsWith("스프링")); //true
String str4 = "자바 스프링 ";
System.out.println(str4.endsWith("스프링")); //false
startsWith()와 endsWith()와 비슷하게 특정 문자열을 확인하는 함수가 있습니다. 바로 contains인데요. 이번에 함께 사용법을 정리해보겠습니다.
boolean contains(CharSequence s)
String str5 = "자바 스프링";
System.out.println(str5.contains("스프링")); //true
String substring(int index)
String substring(int startIndex, int endIndex)
String str6 = "012345";
System.out.println(str6.substring(3)); //345
String str7 = "자바배우기";
System.out.println(str7.substring(2)) //배우기
//01234
String str8 = "Hello";
System.out.println(str7.substring(2,4)) // ll
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])) return false;
}
return answer;
}
}
import java.util.HashSet;
class Solution {
public boolean solution(String[] phone_book) {
HashSet<String> set = new HashSet<>();
for(String num : phone_book){
set.add(num);
}
for(int i =0; i< set.size(); i++){
for(int j=0; j<phone_book[i].length(); j++){
if(set.contains(phone_book[i].substring(0,j))) return false;
}
}
return true;
}
}
import java.util.HashMap;
class Solution {
public boolean solution(String[] phone_book) {
HashMap<String, Integer> map = new HashMap<>();
for(int i = 0; i < phone_book.length; i++) {
map.put(phone_book[i], i);
}
for(int i =0; i< map.size(); i++){
for(int j=0; j<phone_book[i].length(); j++){
if(map.containsKey(phone_book[i].substring(0,j))) return false;
}
}
return true;
}
}