[알고리즘 풀이] 전화번호 목록

변지현·2021년 1월 18일
0

알고리즘 풀이

목록 보기
2/8

문제 설명

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

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

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

제한 사항

  • phone_book의 길이는 1 이상 1,000,000 이하입니다.
  • 각 전화번호의 길이는 1 이상 20 이하입니다.

입출력 예

입출력 예 설명

입출력 예 #1

앞에서 설명한 예와 같습니다.

입출력 예 #2

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

입출력 예 #3

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

풀이

public class Solution {
	public boolean solution(String[] phone_book) {
		boolean answer = true;
	
		L1 : for(int i = 0 ; i < phone_book.length - 1 ; i++){
			for(int j = i+1 ; j < phone_book.length ; j++){
				if(phone_book[i].charAt(0) == phone_book[j].charAt(0)){
					if(phone_book[i].startsWith(phone_book[j]) || phone_book[j].startsWith(phone_book[i])){
						answer = false;
						break L1;
					}
				}
			}
		}
        return answer;
    }
}

 완전 탐색으로 해결하였다. 대신 연산을 줄이기 위해 서로의 첫 문자만 비교하여 서로의 접두사인지 판단하도록 하였다.


github 링크

https://github.com/bjih1999/algorithm/blob/master/programmers/hash/%EC%A0%84%ED%99%94%EB%B2%88%ED%98%B8%20%EB%AA%A9%EB%A1%9D/Solution.java

profile
23살 개발자 변지점프의 더 나은 사람 되기 프로젝트

0개의 댓글