ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (Java) Programmers 전화번호 목록 [Set, HashSet]
    Algorithm 2023. 5. 21. 09:06
    728x90
    반응형

     

    - 목차

     

    소개.

    아래 링크는 "Programmer 의 전화번호 목록" 문제의 웹링크입니다.

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

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

     

     

    문제 설명.

    전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.

    전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.

    • 구조대 : 119
    • 박준영 : 97 674 223
    • 지영석 : 11 9552 4421
    전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.
    제한 사항
    phone_book의 길이는 1 이상 1,000,000 이하입니다.
    • 각 전화번호의 길이는 1 이상 20 이하입니다.
    • 같은 전화번호가 중복해서 들어있지 않습니다.

    입출력 예제

    ["119", "97674223", "1195524421"] false
    ["123","456","789"] true
    ["12","123","1235","567","88"] false

     

     

    문제 분석.

    배열의 모든 원소들을 2개씩 비교를 해야하기 때문에 2중 반복문을 수행해야합니다.

    시간복잡도 O(n) 은 n 의 제곱의 시간복잡도를 가집니다.

    그래서 일반적인 비교를 위해 반복문을 수행하면 시간 초과가 발생합니다.

     

    시간소모를 줄이기 위해서 Set 자료구조를 사용하며,

    Set 에 데이터를 추가하는데에 O(n) = n

    전화번호를 비교하는데에 , O(n) = n * m

    만큼 시간복잡도를 설정할 것입니다.

     

    전화번호 길이 m 은 20 이하이므로 시간복잡도를 줄일 수 있습니다.

     

     

    문제 풀이.

     

    import java.util.*;
    
    class Solution {
        public boolean solution(String[] phoneBook) {
            Set<String> phoneSet = new HashSet();
            
            for (String phone : phoneBook) {
                phoneSet.add(phone);
            }
            
            for (String phone : phoneBook) {
                for (int i = 1; i < phone.length(); i++) {
                    String prefix = phone.substring(0, i);
                    
                    if (phoneSet.contains(prefix)) {
                        return false;
                    }         
                    
                }
            }
            return true;
        }
    }

    반응형
Designed by Tistory.