일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- VIM
- vscode
- Database
- 안드로이드
- Graph
- java
- 다이나믹 프로그래밍
- 백준
- Python
- db
- Redux
- react
- LeetCode
- network
- 프로그래머스
- 알고리즘
- git
- frontend
- DP
- Javascript
- Algorithm
- 리트코드
- 그레이들
- Data Structure
- DFS
- CS
- TypeScript
- 자바
- BFS
- 동적 계획법
Archives
- Today
- Total
늘 겸손하게
프로그래머스 코딩테스트 연습 > 해시 > 전화번호 목록 (Java) 본문

문제해설
한 번호가 다른 번호의 접두어인 경우가 있는지 확인하는 문제입니다. 단, 주어진 번호가 1개 이상 1,000,000개 이하로 주어지므로 효율적인 자료구조와 알고리즘을 사용해야합니다.
문제풀이
각 전화번호 모두 접두어가 될 가능성이 있으므로 전화번호를 key, true 값을 value로 하는 해시맵을 준비합니다. 각 전화번호를 참조하면서 전화번호의 부분수열이 해시맵의 key로 등록되어 있는지 확인합니다. 이미 등록이 되어있다면 접두어가 있다는뜻이므로 false를 반환하고 없다면 참조하는 전화번호를 해시맵에 등록합니다. 모든 전화번호를 탐색해도 접두어가 발견되지 않는다면 true를 반환합니다.
주의할점은, 길이가 짧은 전화번호부터 먼저 해시맵에 등록을 해야 접두어가 있는 모든 경우를 찾을 수 있습니다.
1. HashMap 선언
2. phone_book 배열 오름차순 정렬
3. 각 전화번호 부분수열 HashMap에 있는지 확인
4. 있으면 접두어가 있는 경우 -> false 반환
5. 없으면 전화번호 HashMap에 등록
6. 모든 전화번호 탐색해도 접두어 없었다면 true 반환
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import java.util.HashMap;
import java.util.Arrays;
class Solution {
public boolean solution(String[] phone_book) {
HashMap<String, Boolean> map = new HashMap<>();
Arrays.sort(phone_book);
for (String number : phone_book) {
String temp = "";
for (int i = 0 ; i < number.length() ; i++) {
temp += number.charAt(i);
if (map.containsKey(temp)) {
return false;
}
}
map.put(number, true);
}
return true;
}
}
|
cs |
결과

'코딩 문제 > Programmers' 카테고리의 다른 글
프로그래머스 - 2022 카카오 블라인드 채용 > K진수에서 소수 개수 구하기 - JavaScript (0) | 2022.03.22 |
---|---|
2020 카카오 블라인드 채용 > 문자열 압축 문제풀이 - Java (0) | 2022.03.07 |
Programmers - 2021 KAKAO BLIND RECRUITMENT > 신규 아이디 추천 - Java (0) | 2022.03.02 |
Programmers - 2022 KAKAO BLIND RECRUITMENT - 신고 결과 받기 (0) | 2022.03.01 |
Summer/Winter Coding(~2018) > 소수 만들기 - Level 1 (0) | 2021.11.05 |