Lewis's Tech Keep

[프로그래머스] 전화번호 목록 본문

JAVA/알고리즘

[프로그래머스] 전화번호 목록

Lewis Seo 2021. 1. 4. 02:07

출처: 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