본문 바로가기

PS

[BOJ]5052번 : 전화번호 목록

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

 

5052번: 전화번호 목록

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

www.acmicpc.net

 

분류 : 해싱 , 트라이, 정렬

 

더보기
import java.io.*;
import java.util.*;

public class Main {
    static Myscanner sc = new Myscanner();
    static PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));

    public static void main(String[] args) throws IOException {

        int TC = sc.nextInt();
        while (TC-- > 0) {
            int PhN = sc.nextInt();
            String[] str = new String[PhN];
            for (int i = 0; i < PhN; i++) {
                str[i] = sc.next();
            }
            Arrays.sort(str);
            String ans = "YES";
            for (int i = 1; i < PhN; i++) {
                if (str[i].length() >= str[i - 1].length()
                        && str[i - 1].equals(str[i].substring(0, str[i - 1].length()))) {
                    ans = "NO";
                    break;
                }
            }
            out.println(ans);
        }
        out.flush();
    }
}

class Myscanner {
    BufferedReader br;
    StringTokenizer st;

    Myscanner() {
        br = new BufferedReader(new InputStreamReader(System.in));
    }

    String next() {
        while (st == null || !st.hasMoreElements()) {
            try {
                st = new StringTokenizer(br.readLine());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return st.nextToken();
    }

    int nextInt() {
        return Integer.parseInt(next());
    }

    long nextLong() {
        return Long.parseLong(next());
    }

    double nextDouble() {
        return Double.parseDouble(next());
    }

    String nextLine() {
        String str = "";
        try {
            str += br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return str;
    }
}

 

String을 사전 순으로 정렬한 후에 이전 단어와 현재 단어의 길이 비교 , 이전 단어가 현재 단어와 일치하는지 판단하는 방식으로 접근했다.

테스트 케이스가 약한 것인지 시간 초과를 걱정했지만 우려와는 다르게 통과하였고,

 

분류에 있는 "트라이"를 이용해서 추후에 다시 풀어 볼 예정

 

추가적으로, Java는 다른 방법으로 밑의 방법처럼 startsWith 메서드를 이용하여 풀 수도 있다.

 

'PS' 카테고리의 다른 글

[BOJ]2526번 : 싸이클  (0) 2017.05.01
[BOJ]1660번 : 캡틴 이다솜  (0) 2017.04.26
[BOJ]8983번 : 사냥꾼  (0) 2017.04.22
[BOJ]2352번 : 반도체 설계  (0) 2017.04.20
[BOJ]1890번 : 점프  (0) 2017.04.20