Tiny Bunny
본문 바로가기

programmers

프로그래머스 2단계 : 전화번호 목록 (Java 자바)

728x90
문제 설명

 

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

  • 구조대 : 119
  • 박준영 : 97 674 223
  • 지영석 : 11 9552 4421

전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.

 

 

 

제한 사항

 

  • phone_book의 길이는 1 이상 1,000,000 이하입니다.
  • 각 전화번호의 길이는 1 이상 20 이하입니다.
  • 같은 전화번호가 중복해서 들어있지 않습니다.

 

입출력 예

 

 

 

 

풀이

 

주어진 전화번호 배열에서 어떤 번호가 다른 번호의 접두어인지 확인하는 문제입니다. 즉, 한 전화번호가 다른 전화번호의 첫 부분과 동일한 숫자로 시작하는 경우를 찾아내야 합니다. 전화번호 배열을 순회하면서 접두어 관계를 확인합니다.

 

1. 주어진 전화번호 배열을 HashSet에 저장하여 중복된 전화번호가 제거되며, 빠르게 검색할 수 있습니다.

2. 각 전화번호에 대해 루프를 돌면서 모든 가능한 접두어를 검사합니다. 이를 위해 두 번째 루프에서 현재 전화번호를 문자열로 가져오고, 문자열의 첫 번째 문자부터 (길이-1)까지의 접두어를 만듭니다.

3. 만약 해당 접두어가 HashSet에 이미 존재한다면, 다른 전화번호의 접두어인 것이므로 false를 반환합니다.

4.. 모든 전화번호에 대한 검사가 끝나면, 어떤 번호가 다른 번호의 접두어인 경우가 없다는 것을 의미하므로 true를 반환합니다.

 

import java.util.*;

class Solution {
    public boolean solution(String[] phone_book) {
        
        // 전화번호를 저장할 HashSet을 생성합니다.
        Set<String> set = new HashSet<>();
        
        // 1. 전화번호를 HashSet에 추가합니다.
        for (String phone : phone_book) {
            set.add(phone);
        }
        
        // 2. 각 전화번호에 대해 접두어를 검사합니다.
        for (String phone : phone_book) {
            for (int i = 1; i < phone.length(); i++) {
                // 현재 전화번호의 첫 번째부터 (길이-1)까지의 접두어를 가져옵니다.
                String prefix = phone.substring(0, i);
                
                // 만약 해당 접두어가 HashSet에 존재한다면, 다른 전화번호의 접두어인 경우이므로 false를 반환합니다.
                if (set.contains(prefix)) {
                    return false;
                }
            }
        }
        
        // 3. 모든 전화번호가 접두어 관계가 아니라면 true를 반환합니다.
        return true;
    }
}
728x90