상세 컨텐츠

본문 제목

[프로그래머스/Java] 해시_전화번호 목록

코딩테스트

by bydawn25 2021. 4. 30. 09:38

본문

문제

링크

접두어 확인 문제! startsWith을 사용하면 string끼리 정확한 비교가 가능하다고 했지만 중분류가 해시인 만큼(ㅋㅋㅋ) 해시를 사용하기 위해 hashCode나 hash function을 사용해서 구현하고자 했다.

 

 

첫번째 풀이


import java.util.Arrays;

class Solution {
    public boolean solution(String[] phone_book) {
        
        Boolean result = true;
        
        //시간단축을 위해 sort를 해줬다.
        Arrays.sort(phone_book);

        for(int i=0 ; i < phone_book.length - 1 ; i++) {

          //비교할 string의 hashCode를 얻어온다.
          int hashPhone = phone_book[i].hashCode();
          int from = phone_book[i].length();

          for(int j=i+1;j<phone_book.length;j++) {
            int tempTo = phone_book[j].length();
            int to = tempTo;

            if(tempTo > from)
            to = from;

            //비교당할 string의 hashCode를 얻어와 비교한다.
            if(hashPhone == phone_book[j].substring(0,to).hashCode()) {
              result = false;
              break;
            }

          }

          if(!result) break;
        }
        return result;
    }
}

이렇게 풀이를 진행했더니 효용성 3,4번이 탈락했다. 효용성이란 무엇일까.. 아직모르겠다.

* 지금 보니 수정할 부분이 보인다. 중간에 to조정하는 부분 없어도 될듯... 비교당할 길이가 비교할 길이보다 작으면 실패한다고 해서 continue넣으면 훨씬 깔끔할 것 같다.

 

 

참고한 풀이

링크

hashMap을 이용하여 containKeys 함수를 사용하니 훨씬 간결하게 풀이할 수 있었다.

 

 

 

 

 

 

관련글 더보기