https://programmers.co.kr/learn/courses/30/lessons/42577
코딩테스트 연습 - 전화번호 목록
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조
programmers.co.kr
/**
1. 전체 번호를 해시에 등록해두기
2. 전체 번호를 하나씩 돌면서, 전화번호의 일부가 해시에 있는지 확인
2-1) Stringbuilder 를 통해 전화번호를 만드는 연산 시간복잡도를 O(1)로 만듬.
toString() 시간복잡도 추후에 알아볼것.
2-2) substring을 써도 시간복잡도엔 문제 없을 것으로 보임
1~20 까지 의 합이므로, 20*21/2 즉 시간복잡도 = 10*21 * 10^6
3. 1_000_000*20 = 10^7*2 시간복잡도
**/
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
Map<String,Integer> map = new HashMap<>();
// 해시 등록
for(String phone_number: phone_book){
if(!map.containsKey(phone_number)){
map.put(phone_number,1);
}else{
return false;
}
}
// 전화번호의 일부가 해시에 들어있다면, false 반환
for(String phone_number: phone_book){
StringBuilder sb = new StringBuilder();
for(int i = 0; i < phone_number.length()-1; i++){
sb.append(phone_number.charAt(i));
if(map.containsKey(sb.toString())){
return false;
}
}
}
return true;
}
}
'Algorithm > 프로그래머스풀이' 카테고리의 다른 글
| [알고리즘 문제풀이] 프로그래머스 - 뉴스 클러스터링 / JAVA(자바) (0) | 2022.02.22 |
|---|---|
| [알고리즘 문제풀이] 프로그래머스 - 예상 대진표 / JAVA(자바) (0) | 2022.02.21 |
| [알고리즘 문제풀이] 프로그래머스 - 괄호 변환 / JAVA(자바) (0) | 2022.02.20 |
| [알고리즘 문제풀이] 프로그래머스 - 합승 택시 요금 / JAVA(자바) (0) | 2022.02.18 |
| [알고리즘 문제풀이] 프로그래머스 - 광고 삽입 / JAVA(자바) (0) | 2022.02.18 |
댓글