[BOJ] 5052.전화번호 목록 (Java)
by 뚜부니
이 문제는 한 번호가 다른 번호의 접두어로 사용되는지 확인하고,
하나라도 접두어로 사용된 경우 NO를 출력하고, 그렇지 않은 경우 YES를 출력하는 문제입니다.
입력받은 전화번호를 정렬한 후
현재 위치의 번호가 다음 위치의 번호의 접두어로 속하는지 startWith()을 통해 확인합니다.
이때, 두 전화번호가 같은 경우는 없으므로 두 번호의 길이가 같을 경우 확인할 필요가 없습니다.
import java.io.*;
import java.util.Arrays;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine()); // 테스트케이스 수
for (int i = 0; i < t; i++) {
int n = Integer.parseInt(br.readLine()); // 전화번호 수
String[] phoneNumber = new String[n]; // 전화번호를 담은 배열
// 전화번호부 생성
for (int j = 0; j < n; j++) {
phoneNumber[j] = br.readLine();
}
Arrays.sort(phoneNumber);
if (isStart(n, phoneNumber)) {
System.out.println("YES");
}
else {
System.out.println("NO");
}
}
br.close();
}
/** isStart
*
* @param n 전화번호 목록 수
* @param phoneNumber 전화번호 목록
* @return 결과에 따른 boolean 값
*/
public static boolean isStart(int n, String[] phoneNumber) {
for (int k = 0; k < n - 1; k++) {
if (phoneNumber[k].length() == phoneNumber[k+1].length()) // 길이가 같은 경우 비교할 필요 X
continue;
if (phoneNumber[k+1].startsWith(phoneNumber[k])) { // 접두어인 경우 false 반환
return false;
}
}
return true; // 접두어가 아닌 경우이므로 true 반환
}
}
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 1043.거짓말 (Java) (0) | 2021.04.30 |
---|---|
[BOJ] 5430.AC (Java) (0) | 2021.04.30 |
[BOJ] 11720.숫자의 합 (Java) (0) | 2021.04.27 |
[BOJ] 15685.드래곤커브 (Python) (0) | 2021.04.23 |
[BOJ] 17406.배열돌리기4 (0) | 2021.04.22 |
블로그의 정보
개발하는 두부
뚜부니