본문 바로가기

Coding Test/Programmers

[JAVA] 해시 Lv.2 / 전화번호 목록

[문제]

[제한 조건]

  • 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

[알고리즘]

전화번호가 담긴 phone_book 배열에서 한 element가 다른 element로 "시작되는지" 찾는 문제이다.

간단하게 배열을 Arrays.sort() 를 이용하여 정렬한뒤 반복문으로 앞에서부터 다음 인덱스 값이 현재 인덱스 값으로 시작하는지 찾아서 false를 리턴해주면 되는 문제이다

다음 인덱스 값이 현재 인덱스 값으로 시작하는지 판별하는것에는  startsWith() 를 사용하였다


startsWith()
boolean startsWith(String prefix)

String 변수의 문자열이 인자로 전달된 문자로 시작되면 boolean 값true가 반환되고 인자로 전달된 문자열로 시작하지 않으면 false로 반환한다
String이 특정 문자열로 시작되는지 알 수 있다.

 


[코드]

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