개발하는 두부

[BOJ] 5052.전화번호 목록 (Java)

by 뚜부니

 

 

5052번: 전화번호 목록

첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가

www.acmicpc.net

 

이 문제는 한 번호가 다른 번호의 접두어로 사용되는지 확인하고,

하나라도 접두어로 사용된 경우 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

블로그의 정보

개발하는 두부

뚜부니

활동하기