Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Linux
- zookeeper
- Python
- DP
- 자바
- 코드워
- 동적프로그래밍
- codewars
- programmers
- docker
- redis
- HBase
- golang
- Java
- 문제풀이
- scala
- 파이썬
- gradle
- boj
- go
- OOM
- dynamic programming
- 리눅스
- 튜토리얼
- 주키퍼
- 알고리즘
- leetcode
- 스칼라
- 프로그래머스
- Go언어
Archives
- Today
- Total
파이문
[Programmers] 전화번호 목록 (Java) 본문
728x90
전화 번호 목록
programmers.co.kr/learn/courses/30/lessons/42577
HashMap 으로 풀이
모든 전화번호를 HashMap 에 넣고 2중으로 다시 순회해서 확인하는 식으로 했다. 조건에 phone_book의 길이는 1 이상 1,000,000 이하입니다. 라고 적혀 있어서 효율성 테스트에서 실패할 줄 알았는데, 생각보다 최대 사이즈가 크지 않은 모양이었다. (그래도 혹시 몰라서 주어진 phone_book 을 정렬했다.)
자기 자신 (같은 인덱스 참고) 을 보고 잘못 판단할 수 있기 때문에 HashSet 이 아닌 HashMap 으로 value 값엔 인덱스를 넣어 구현하였다.
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
Arrays.sort(phone_book);
HashMap<String, Integer> map = new HashMap<>();
for (int i = 0; i < phone_book.length; i++) {
if (map.containsKey(phone_book[i])) {
return false;
}
map.put(phone_book[i], i);
}
for (Map.Entry<String, Integer> e1 : map.entrySet()) {
for (Map.Entry<String, Integer> e2 : map.entrySet()) {
if (e1.getValue() == e2.getValue()) {
continue;
}
if (e1.getKey().startsWith(e2.getKey()) || e2.getKey().startsWith(e1.getKey())) {
return false;
}
}
}
return true;
}
}
'문제 풀이 > programmers' 카테고리의 다른 글
[Programmers] 주식가격 (Python) (0) | 2021.03.04 |
---|---|
[Programmers] 다리를 지나는 트럭 (Java) (0) | 2021.03.04 |
[Programmers] 단어 변환 DFS 풀이 (Java) (0) | 2020.07.09 |
[Programmers] 네트워크 DFS 풀이 (Java) (0) | 2020.07.08 |
[Programmers] 타겟 넘버 DFS 풀이, BFS 풀이 (Java) (0) | 2020.07.08 |
Comments