public boolean solution(String[] phone_book){
boolean answer = true;
Map<String, Integer> map = new HashMap<>();
Arrays.sort(phone_book);
// 해쉬에 전화번호와 접두사 횟수 담기(자기 자신 포함해서 1)
for (String phone : phone_book) {
map.put(phone, 0);
}
for (String prefixPhone : map.keySet()) {
// 반복문 돌면서 prefixPhone이 접두사로 있으면 -1하기
for (String phone : map.keySet()) {
if (phone.equals(prefixPhone))
continue;
if (phone.startsWith(prefixPhone)) {
answer = false;
break;
}
}
if (answer == false)
break;
}
return answer;
}
2번째 코드
public boolean solution(String[] phone_book) {
boolean answer = true;
Integer min = 1;
Map<String, Integer> map = new HashMap<>();
Arrays.sort(phone_book);
// 해쉬에 전화번호와 접두사 횟수 담기(자기 자신 포함해서 1)
for (String phone : phone_book) {
map.put(phone, 1);
}
for (String prefixPhone : map.keySet()) {
// 반복문 돌면서 prefixPhone이 접두사로 있으면 -1하기
for (String phone : map.keySet()) {
if (phone.startsWith(prefixPhone)) {
map.put(prefixPhone, map.get(prefixPhone) - 1); // 접두사이면 접두사인 key의 value에 -1
}
}
// min보다 작으면 min으로 저장
if (map.get(prefixPhone) < min)
min = map.get(prefixPhone);
}
// 0 미만인 value가 있으면 false 리턴
if (min < 0) answer = false;
return answer;
}
결과
통과한 코드입니다.
public boolean solution(String[] phone_book) {
boolean answer = true;
Map<String, Integer> map = new HashMap<>();
Arrays.sort(phone_book);
// 해쉬에 전화번호와 접두사 횟수 담기(value에 무엇을 담든 상관없다.)
for (int i = 0; i < phone_book.length; i++) {
map.put(phone_book[i], i);
}
for (int i = 0; i < phone_book.length; i++) {
for (int j = 1; j < phone_book[i].length(); j++) { // 끝에서 두번째까지만 탐색해서 그 값이 있으면 접두어가 있는 것으로 처리 (끝까지 탐색하면 자기 자신)
System.out.println("phoneBook은 "+ phone_book[i]);
System.out.println(phone_book[i].substring(0, j));
if (map.containsKey(phone_book[i].substring(0, j))) {
return false;
}
}
}
return true;
}