처음에 이 문제를 해시를 이용하여 풀라고 하길래 굳이..? 하고 처음에 생각난대로 startsWith()를 사용하여 문제를 풀었다. 잘 풀었는데 계속 효율성 3, 4번째에서 실패를 했다. 문제를 보니 최근 변경된 테스트케이스가 startsWith()를 사용해서 푸는 방식이 통과가 안되는 모양이다..
그래서 결국 해시를 이용해서 풀기로 했다.
📍
일단 phone_book에있는 전화번호를 HashMap에 put을 했다.
HashMap<String, String> map = new HashMap<>();
for(String str: phone_book){
map.put(str,"");
}
대체 왜 해시를 사용해서 풀어야하는가 생각했던 이유가 키와 값의 쌍을 뭘로 해야할지를 몰라서였다. 사실 아직도 이유는 모르겠지만 키만 신경쓰고 값은 신경 안쓰기로 했다.
📍
for(int i = 0; i< phone_book.length; i++){
for(int j = 0; j < phone_book[i].length(); j++)
if (map.containsKey(phone_book[i].substring(0,j))){
return false;
}
}
}
이중포문과 subString()을 이용했다. 0부터 전화번호 길이까지 자른 문자열과 동일한 키가 있는지 containsKey()를 이용하여 검색했고, 존재하면 바로 false를 리턴하도록 했다.
import java.util.HashMap;
class Solution {
public boolean solution(String[] phone_book) {
HashMap<String, String> map = new HashMap<>();
for(String str: phone_book){
map.put(str,"");
}
for(int i = 0; i< phone_book.length; i++){
for(int j = 0; j < phone_book[i].length(); j++)
if (map.containsKey(phone_book[i].substring(0,j))){
return false;
}
}
return true;
}
}