Lewis's Tech Keep
[프로그래머스] 전화번호 목록 본문
출처: programmers.co.kr/learn/courses/30/lessons/42577?language=java
해시를 사용하는 문제였다.
기존 해시코드에 대한 개념이 별로 없었기에 문제는 답을 참고하면서 풀게 되었다.
참고 답 : codevang.tistory.com/290
더보기
답을 보고 그냥 거의 똑같이 짠 코드입니다.
제가 이해한 부분 찾기 쉽게 그냥 글자, 루프 들만 직관적으로 바꿨습니다.
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
for(String phone_num_check: phone_book) {
int phone_num_check_hashcode = phone_num_check.hashCode();
int phone_num_check_length = phone_num_check.length();
for(String phone_num_base: phone_book) {
if (phone_num_base == phone_num_check) {
continue;
}
int phone_num_base_length = phone_num_base.length();
if (phone_num_base_length >= phone_num_check_length) {
int phone_num_base_hashcode = phone_num_base.substring(0,phone_num_check_length).hashCode();
if(phone_num_base_hashcode == phone_num_check_hashcode) {
answer = false;
return false;
}
}
}
}
return answer;
}
}
- 필요한 서칭
- 현재 O(n^2)에 돌아가고 있는데 해시 테이블, 해시 셋, 맵 같은 자료구조를 잘 이용하면 O(n)까지 줄일 수 있을 것 같은데 실제로 문제보고도 그 방법을 고민하다가 내가 스스로 정한 타임에 타임아웃됨.
- 해시코드에 대해서 조금 더 자세히 알아보기 -> 문자열 비교 시 왜 더 빠른지
'Java > 알고리즘' 카테고리의 다른 글
[프로그래머스] 기능개발 (0) | 2021.01.22 |
---|---|
[프로그래머스] 주식가격 (0) | 2021.01.21 |
[General] 캐싱에 관해 (0) | 2021.01.12 |
[로직] 숫자야구겜 (0) | 2021.01.06 |
java 패킷 등록 시 잊지 말아야 할 것 (0) | 2020.12.09 |
Comments