🟦/백준

[골드 4] 전화번호 목록

진뚱이용 2023. 3. 29. 21:26

https://www.acmicpc.net/problem/5052

 

5052번: 전화번호 목록

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

www.acmicpc.net

1. 맨 처음 거 해시에 박고

2. 들어오는 거 한 글자씩 tmp에 붙여나가면서 hash에 있는지 조회 있으면 NO로 변경 없으면 YES 유지

3. tmp 자체가 hashkey의 접두어 인지도  hashkey를 전부 조회하며 체크

4. n번 반복

결과: 시간초과

1. 정렬하기

2. i번째와 i+1번째의 단어 비교하기

 

import java.io.*;
import java.util.*;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int test_case;

        test_case = Integer.parseInt(br.readLine());
        for (int t = 0; t < test_case; t++) {
            int n;
            String[] number;
            boolean consistency = true;

            n = Integer.parseInt(br.readLine());
            number = new String[n];

            for (int i = 0; i < n; i++)
                number[i] = br.readLine();

무난하게 입력받기

            Arrays.sort(number);

            for(int i = 0 ; i < n-1 ; i++){
                String tmp1 = number[i];
                String tmp2 = number[i+1];

                int index =0;
                while ( index< tmp1.length() && index< tmp2.length()){
                    if(tmp1.charAt(index) != tmp2.charAt(index))
                        break;
                    index++;
                }

                if(index == tmp1.length() || index == tmp2.length())
                    consistency=false;

            }

            if (consistency)
                sb.append("YES");
            else
                sb.append("NO");

            System.out.println(sb);
            sb.setLength(0);
        }
    }

}

코드 리뷰 x