

import java.util.HashMap;
import java.util.Map;
public class PRO_42577 {
//해시 사용 O.
public static boolean solution(String[] phone_book) {
Map<String, Integer> map = new HashMap<String, Integer>();
// phone_book 배열 안의 값들을 map에 넣기
for (int i = 0; i < phone_book.length; i++) {
map.put(phone_book[i], i);
}
// containsKey : 맵에서 인자로 보낸 키가 있는지 확인
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;
}
public static void main(String[] args) {
String[] phone_book = {"119", "97674223", "1195524421"};
System.out.println(solution(phone_book));
}
}
해시를 사용하여 문제에 접근했다. 먼저 해시맵을 생성하여 phone_book 배열에 저장되어 있는 전화번호 값들을 저장하였다. 그 후, phone_book 배열 길이만큼 반복하고 동시에 phone_book 배열 내의 값의 길이만큼 이중반복하면서, subString 메서드를 사용하여 문자열이 해시맵에 포함되어 있는지의 유무를 확인했다. 만약 문자열의 값이 해시맵에 존재한다면, false를 리턴해주었다.
containsKey() : 맵에서 인자로 보낸 키가 있는지 확인