https://www.acmicpc.net/problem/5052
일관성이 있는지 없는지 구하는 프로그램
번호 길이순으로 먼저 정렬을 진행.
테스트케이스는 최대 50개
전화번호의 수는 10000개
포함 여부를 확인
곰곰히 생각해보니 자바에서 접두어를 확인하는 함수가 존재한다는 걸 생각해냈다.
startWith 함수를 이용한 확인방법
먼저 정렬을 통해서 길이가 작은 순부터 확인 진행
길이가 들쑥날쑥 인거보다는 길이 정렬을 통해서 비교도 편하게된다.
정렬을 통해서 사전순정렬이 진행되기 때문에 특정 문자열 바로 뒷 문자와 접두어 관계일 것이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
String[] phone;
while (T-- > 0) {
int N = Integer.parseInt(br.readLine());
phone = new String[N];
for (int idx = 0; idx < N; idx++) {
phone[idx] = br.readLine();
}
Arrays.sort(phone);
if (isContains(N, phone)) {
sb.append("YES\n");
} else {
sb.append("NO\n");
}
}
System.out.println(sb);
}
//포함여부 확인
//포함이 되어있다면 일관성이 없으므로 false
//포함이 되어있지 않다면 일관성이 있으므로 true
private static boolean isContains(int n, String[] phone) {
for(int idx = 0; idx <n-1;idx++){
if(phone[idx+1].startsWith(phone[idx])){
return false;
}
}
return true;
}
}