Java/알고리즘

프로그래머스 알고리즘 - 해시/전화번호 목록 Java

devGeek 2022. 3. 30. 10:41
반응형

문제 설명

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

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

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

제한 사항

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

입출력 예제

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

입출력 예 설명

입출력 예 #1
앞에서 설명한 예와 같습니다.

입출력 예 #2
한 번호가 다른 번호의 접두사인 경우가 없으므로, 답은 true입니다.

입출력 예 #3
첫 번째 전화번호, “12”가 두 번째 전화번호 “123”의 접두사입니다. 따라서 답은 false입니다.

학습한 풀이

Code

import java.util.Arrays;

class Solution {
   public boolean solution(String[] phoneBook) {
        Arrays.sort(phoneBook);
        for (int i = 0; i < phoneBook.length - 1; i++){        
            if (phoneBook[i + 1].startsWith(phoneBook[i])){
                return false;
            }
        }
        return true;
    }
}

Arrays.sort(Object[])

정의: 배열 원소 타입의 비교 기준에 따라, 해당 배열을 오름차순으로 정렬한다.

Arrays.sort(String[]) 예시

Code
String[] arr = {"Apple", "Kiwi", "Orange", "Banana", "Watermelon", "Cherry"};
Arrays.sort(arr);
System.out.println("Sorted arr[] : " + Arrays.toString(arr));

Output

Sorted arr[] : [Apple, Banana, Cherry, Kiwi, Orange, Watermelon]

Arrays.sort(): Timsort

Timsort란

Timsort는 다양한 종류의 실제 데이터에서 잘 수행되도록 설계된 병합 정렬 및 삽입 정렬 에서 파생된 안정적인 하이브리드 정렬 알고리즘이다. Python 프로그래밍 언어 에서 사용하기 위해 2002년 Tim Peters 에 의해 구현되었다. 알고리즘은 이미 정렬된(실행된) 데이터의 하위 시퀀스를 찾고 이를 사용하여 나머지를 보다 효율적으로 정렬한다. 이는 특정 기준이 충족될 때까지 실행을 병합하여 수행된다. Timsort는 버전 2.3부터 Python의 표준 정렬 알고리즘이었다. 또한 Android 플랫폼의 Java SE 7에서 기본이 아닌 유형의 배열을 정렬하는 데 사용된다.

시간 복잡도
케이스 성능
최악의 경우 O(nlogn)
최상의 경우 O(n)
평균 O(nlogn)
최악의 경우 공간 복잡성 O(n)
알고리즘
반응형