본문 바로가기

ALGORITHM

백준 5052 전화번호 목록 (Java)

1. 문제 링크

 

5052번: 전화번호 목록

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

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

1. N개의 전화번호를 입력받아 list에 넣는다.

2. list를 정렬한다. (문자열)

3. 비교 문자열보다 길이가 긴 경우에만 앞의 문자열만큼에서 같은지 판단한다.

  3-1. 비교 문자열과 동일할 경우 일관성을 유지하지 못해 끝낸다.

4. 비교 문자열을 현재 문자열로 바꾼다.

5. 위의 과정을 반복하고 출력한다.

 

4. 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int T = Integer.parseInt(br.readLine());
		for(int t=0;t<T;t++) {
			int N = Integer.parseInt(br.readLine());
			ArrayList<String> list = new ArrayList<>();
			for(int i=0;i<N;i++) {
				list.add(br.readLine());
			}
			Collections.sort(list);
			int len = 11;
			String now = "";
			boolean flag = false;
			for(String s: list) {
				if(s.length()>len && now.equals(s.substring(0,len))) {
					flag = true;
					break;
				}
				now = s;
				len = now.length();
			}
			if(flag) {
				sb.append("NO");
			}
			else {
				sb.append("YES");
			}
			sb.append("\n");
		}
		System.out.println(sb);	
	}
}