본문 바로가기

개발/알고리즘

해시: 전화번호 목록

문제 URL

https://programmers.co.kr/learn/courses/30/lessons/42577

 

코딩테스트 연습 - 전화번호 목록

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조

programmers.co.kr

 

문제 요구사항

문제 풀이 (git 링크)

https://github.com/JoyDaheeCha/AlgorithmTest

 

JoyDaheeCha/AlgorithmTest

Contribute to JoyDaheeCha/AlgorithmTest development by creating an account on GitHub.

github.com

 

코드 설명

package phoneBook;

import java.util.Arrays;

public class PhoneBook {
    // 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return
    public boolean solution(String[] phone_book) {
        Arrays.sort(phone_book);
        for (int i = 0; i < phone_book.length-1; i++) {
            if (phone_book[i+1].startsWith(phone_book[i])){
                return false;
            }
        }
        return true;
    }
}

phone_book 어레이에서 n번째 아이템이 n+1번째 아이템의 접두사임을 for문을 통해 확인하고자 한다. 

 

1. 문자열 순서대로 정렬. 

- 짧은 문자에서 긴 문자 순서로 정렬 한다. 

- 이유: 

{1231, 123, 18434}의 경우 123이 1231보다 뒤에 위치한다. 123이 앞에 와야 1231에 포함되는지 알 수 있다. 

 

2. for문+ startsWith을 사용해서 접두사 여부 찾기 

 

궁금증

본 문제는 해시에 관한 문제다. 해시를 사용해서 푼 케이스를 봤지만, 왜 해시를 사용하는지 잘 이해가 가질 않는다.. 

(혹시 이유를 아실 경우 댓글로 알려주시면 감사하겠습니다! )

나중에 깨달으면 포스팅을 수정할 계획이다.