[Algorithms] 전화번호 목록
문제 설명
주어진 배열에서 한 요소가 다른 요소의 접두어일 경우 false 아니면 true
입출력 예
phone_book | return |
---|---|
[“119”, “97674223”, “1195524421”] | false |
[“123”,”456”,”789”] | true |
[“12”,”123”,”1235”,”567”,”88”] | false |
입출력 예 #2
한 번호가 다른 번호의 접두사인 경우가 없으므로, 답은 true입니다.
입출력 예 #3
첫 번째 전화번호, “12”가 두 번째 전화번호 “123”의 접두사입니다. 따라서 답은 false입니다.
문제 풀이
- 주어진 배열 정렬 후, i 와 i + 1 요소 체크
- 정렬시에는 아스키코드 크기를 비교하는 정렬로 해야함 그래야 접두어 크기순으로 정렬되어 접두어 체크가 가능함
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
Arrays.sort(phone_book); // 아스키코드 크기를 비교하여 정렬됨 1132 113 1024 ...
for(int i = 0; i < phone_book.length - 1; i++) {
// 중복 숫자는 없기 때문에 i + 1 더 클 때만 비교
if(phone_book[i].length() < phone_book[i + 1].length()) {
if(phone_book[i + 1].startsWith(phone_book[i])) return false;
}
}
return answer;
}
}
Leave a comment