배열의 요소 중 하나가 다른 요소의 접두어인지 확인하는 문제
String 클래스의 startsWith(), endsWith()와 같은 것을 생각할 수 있다.
번외로 indexOf()나 contains()로 풀이한 것도 있으니 문자열 관련 내용이 나오면 이와 같은 메서드를 활용해보자.
+ 해시를 이용한 문제이니 나중에 꼭 해시로 풀어보자.
public class Ex2 {
public static void main(String[] args) {
String[] phone_book = { "123", "456", "789" };
System.out.println(solution(phone_book));
}
public static boolean solution(String[] phone_book) {
boolean answer = true;
for(int i = 0; i < phone_book.length - 1; i++) { // 비교할 기준이므로 마지막 요소는 빼기
for(int j = i + 1; j < phone_book.length; j++) { // 비교할 대상이므로 두 번째 요소부터 비교
if(phone_book[i].startsWith(phone_book[j])) { // 순차적 비교
return false;
}
if(phone_book[j].startsWith(phone_book[i])) { // 거꾸로도 비교
return false;
}
}
}
return answer;
}
}
아래 예시는 정렬을 먼저 하고 한 번만 비교를 했다는 점에서 위와 다르다.
import java.util.Arrays;
public class Ex2_1 {
public static void main(String[] args) {
String[] phone_book = { "123", "456", "789" };
System.out.println(solution(phone_book));
}
public static boolean solution(String[] phone_book) {
boolean answer = true;
// 오름차순으로 정렬
// sort하면 가장 큰 수가 뒤로 가므로 뒤에 숫자로부터 앞의 숫자가 시작하는지 확인할 필요가 없음
Arrays.sort(phone_book);
for(int i = 0; i < phone_book.length - 1; i++) { // 비교할 기준이므로 마지막 요소는 빼기
if(phone_book[i+1].startsWith(phone_book[i])) {
return false;
}
}
return answer;
}
}
'ALGORITHM' 카테고리의 다른 글
List <-> int[] (0) | 2021.01.07 |
---|---|
[프로그래머스 Java] 크레인 인형뽑기 게임 (0) | 2021.01.07 |
[백준 10989 Java] 수 정렬하기 - 계수 정렬 (0) | 2021.01.04 |
[백준 2750 / 2751 Java] 수 정렬하기 - 선택 정렬 / Arrays / Collections (0) | 2021.01.03 |
[백준 2331 Java] 분해합 / 각 자리의 합 구하기 (0) | 2020.12.31 |