[프로그래머스] 전화번호 목록 (Java)
https://school.programmers.co.kr/learn/courses/30/lessons/42577
입력 : String[] phone_book (1 ≤ phone_book.length ≤ 1,000,000)
출력 : 어떤 번호가 다른 번호의 접두어인 경우가 있는지 여부
O(nlogn)
정렬
없음
없음
startswith를 통해 각 문자열을 판단한다.
구현
정렬 풀이
import java.util.*;
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])) {
answer = false;
}
}
return answer;
}
}
해시 풀이
import java.util.HashMap;
class Solution {
public boolean solution(String[] phone_book) {
// 해시맵 생성
HashMap<String, Integer> map = new HashMap<>();
// 모든 전화번호를 해시맵에 추가
for (String phone : phone_book) {
map.put(phone, 1);
}
// 각 전화번호의 모든 접두사가 해시맵에 존재하는지 확인
for (String phone : phone_book) {
for (int i = 1; i < phone.length(); i++) {
if (map.containsKey(phone.substring(0, i))) {
return false;
}
}
}
// 접두사가 없는 경우 true 반환
return true;
}
}