✔ 전화번호 목록
문제 분석하기
해시를 사용해 전화번호를 저장한 후, 전화번호를 하나씩 잘라가며 해시 안에 존재하는지 확인
예) "12", "123"
"1"이 현재 해시에 존재하는지 확인
"12"가 현재 해시에 존재하는지 확인
손으로 풀어보기
- HashMap에 전화번호 1을 저장
- HashMap에서 각 전화번호를 잘라 접두어가 존재하는지 확인
- 이때 존재한다면 false 리턴
- 끝까지 존재하지 않는다면 true 리턴
슈도코드 작성하기
phone_book(전화번호부에 적힌 전화번호를 담은 배열)
map(전화번호가 담긴 hashMap)
map에 phone_book, 1 저장하기
for(i -> phone_book의 크기만큼) {
for(j -> i의 크기만큼) {
if(map에 phone_book[i].substring(0, j)가 존재한다면)
return false;
}
}
return true;
코드 구현하기
/**
* 42577) 전화번호 목록
*/
public class K003_42577 {
// phone_book(전화번호부에 적힌 전화번호를 담은 배열)
public boolean solution(String[] phone_book) {
// map(전화번호가 담긴 hashMap)
Map<String, Integer> map = new HashMap<>();
// map에 phone_book, 1 저장하기
for (String phone : phone_book) {
map.put(phone, 1);
}
for (int i = 0; i < phone_book.length; i++) {
for (int j = 0; j < phone_book[i].length(); j++) {
// map에 phone_book[i]의 부분 문자열이 존재한다면
if (map.containsKey(phone_book[i].substring(0, j)))
return false;
}
}
return true;
}
// 테스트 케이스
public static void main(String[] args) {
K003_42577 solution = new K003_42577();
String[] phone_book = { "119", "97674223", "1195524421" };
boolean result = solution.solution(phone_book);
System.out.println(result);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[42628] 이중우선순위큐 (0) | 2023.11.11 |
---|---|
[42586] 기능개발 (0) | 2023.11.11 |
[49191] 순위 (0) | 2023.11.10 |
[43236] 징검다리 (0) | 2023.11.09 |
[43162] 네트워크 (0) | 2023.11.08 |