알고리즘/백준

[백준 - 5052] 골드4 - 전화번호 목록(문자열)

www.acmicpc.net/problem/5052

 

5052번: 전화번호 목록

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

www.acmicpc.net

1. 유형

문자열

 

2. 풀이법

문자열 길이가 작은 순으로 정렬한다

 

set을 이용해서 들어있는 문자를 탐색한다

 

3. 코드

package 문자열;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;

public class back_5052전화번호_목록 {
	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(in.readLine(), " ");
		int t=Integer.valueOf(st.nextToken());
		for(int tc=1; tc<=t;tc++) {
			st = new StringTokenizer(in.readLine(), " ");
			int n = Integer.valueOf(st.nextToken());
			String str[] = new String[n];
			for (int i = 0; i < n; i++) {
				st = new StringTokenizer(in.readLine(), " ");
				str[i] = st.nextToken();
			}
			Arrays.sort(str, new Comparator<String>() {
				@Override
				public int compare(String o1, String o2) {
					// TODO Auto-generated method stub
					return o1.length() - o2.length();
				}
				
			});
			//set에 넣는다
			Set<String> set = new HashSet<>();
			set.add(str[0]);
			//문자열 하나씩 비교한다
			boolean flag = true;
			out:for(int i=1;i<str.length;i++) {
				//true를 반환하면 반복 종료하고 flag false로 반환
				String tmp = "";
				for(int j=0;j<str[i].length();j++) {
					tmp+=str[i].charAt(j);
					if(set.contains(tmp)==true) {
						flag = false;
						break out;
					}
				}
				set.add(str[i]);
				//false면 계속 반복진행
			}
			if(flag) {
				System.out.println("YES");
			}else {
				System.out.println("NO");
			}
		}
		
	}
}

 

정렬하는 코드는 한번 더 봐야겠다

			Arrays.sort(str, new Comparator<String>() {
				@Override
				public int compare(String o1, String o2) {
					// TODO Auto-generated method stub
					return o1.length() - o2.length();
				}
				
			});