본문 바로가기

코딩테스트 연습장

[JAVA] 전화번호 목록(프로그래머스) - 배열 비교하기

문제

 

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

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

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

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


제한사항

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

입출력 예제 phone_bookreturn

["119", "97674223", "1195524421"] false 앞에서 설명한 예와 같습니다.
["123","456","789"] true 한 번호가 다른 번호의 접두사인 경우가 없으므로, 답은 true입니다.
["12","123","1235","567","88"] false 첫 번째 전화번호, “12”가 두 번째 전화번호 “123”의 접두사입니다.
따라서 답은 false입니다.

 

문제를 보고 입출력 예제를 보고 좀 고민했다.

한번에 이해가 안가서 접두사의 정의도 좀 찾아봤다.

머리가 굳어버렸나 고민도 좀 했는데, 예제에 위의 119를 넣고 고민을 해서 이해가 안된거였다...

우선 다른 사람들이 어떻게 풀었나 찾아보는 습관을 버리기 위해 메모장을 펼쳐 방안을 찾아보았다.

 

1. 배열 정렬하기

 

정렬을 하면 구분이 쉬워질 것이라 생각했기에 오름차순 배열을 먼저 생각했다.

그 뒤 비교를 하면 되지 않을까 생각을 했는데, 내 머리속엔 equals 뿐이 생각나는게 없었다.

그래서 검색을 시작했다.

 

2. 배열 비교에 사용할 메서드

 

다들 이 문제를 풀어봤는지 너무나 쉽게 tip을 얻을 수 있었다.

 

3. 출력 위치 고민하기

 

출력을 어느 위치에서 할 지 고민을 함으로써 문제를 마무리했다.

import java.util.*;

class Solution {
    public boolean solution(String[] phone_book) {

        Arrays.sort(phone_book);
        int size = phone_book.length - 1;

        for (int i = 0; i < size; i ++) {
            if (phone_book[i+1].startsWith(phone_book[i])) {
                retrun false;
            }
        } 
        return true;
    }
}

 

 

 

'코딩테스트 연습장' 카테고리의 다른 글

[JAVA] 특정문자 개수 구하기  (0) 2021.10.07