전화번호 목록이 주어진다. 이때, 이 목록이 일관성이 있는지 없는지를 구하는 프로그램을 작성하시오.
전화번호 목록이 일관성을 유지하려면, 한 번호가 다른 번호의 접두어인 경우가 없어야 한다.
예를 들어, 전화번호 목록이 아래와 같은 경우를 생각해보자
첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가 하나씩 주어진다. 전화번호의 길이는 길어야 10자리이며, 목록에 있는 두 전화번호가 같은 경우는 없다.
각 테스트 케이스에 대해서, 일관성 있는 목록인 경우에는 YES, 아닌 경우에는 NO를 출력한다.
2
3
911
97625999
91125426
5
113
12340
123440
12345
98346
NO
YES
import java.io.*;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int t = Integer.parseInt(br.readLine());
for (int i = 0; i < t; i++) {
int n = Integer.parseInt(br.readLine());
String[] num = new String[n];
boolean result = true;
for (int j = 0; j < n; j++) {
num[j] = br.readLine();
}
Arrays.sort(num);
for (int j = 1; j < n; j++) {
if (num[j].startsWith(num[j - 1])) {
result = false;
break;
}
}
if (result) {
bw.write("YES\n");
} else {
bw.write("NO\n");
}
}
br.close();
bw.flush();
bw.close();
}
}
알고리즘
1. 입력받은 숫자들로 이루어진 배열을 오름차순으로 정렬한다.
2. for 문을 돌면서 현재 단어 다음으로 오는 단어가 현재 단어로 시작하는지 확인한다.
3. 똑같이 시작한다면 NO를 출력한다.