분류가 해시로 되어있다.
그래서 Map 을 이용해서 풀었다.
접두어 란 문장의 시작부분에 겹치는 문자가 들어있는지 를 의미한다.
예제에서는 "119" 라는 문자열이 지영석의 전화번호 앞 글자에 있으므로 접두사가 있는 것이다.
그래서 처음 코드를 생각할 때는 맨 앞에 접두어가 있으니 맨 앞에 문자열을 기준으로 찾으면 되겠다 생각했는데 예제에는 없지만 접두어가 맨 뒤에 있는 경우도 있다.
그래서 모든 문자열을 Map 에 저장한 다음 문자열을 한글자 씩 잘라 map 에서 해당 문자열이 있는지를 탐색했다. 다만 그렇게 탐색할 경우 접두어도 같이 인식이 되므로 문자열의 마지막 글자를 빼고 key 값을 비교해야한다.
이 문제는 있으면 false 를 리턴하고 없으면 true 를 리턴한다.
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
Map<String, Boolean> map = new HashMap<>();
for (int i = 0; i < phone_book.length; i++) { // map 에 문자열 저장
map.put(phone_book[i], true);
}
for (int i = 0; i < phone_book.length; i++) {
String s = "";
for (int j = 0; j < phone_book[i].length() -1; j++) {
String str = String.valueOf(phone_book[i].charAt(j));
s += str;
if (map.containsKey(s)) { // map 에서 해당하는 키가 있는지 탐색
answer = false;
}
}
}
return answer;
}
}