어제의 나보다 성장한 오늘의 나

[백준][BOJ-5052][자바] 전화번호 목록 본문

알고리즘/백준(BOJ)

[백준][BOJ-5052][자바] 전화번호 목록

NineOne 2021. 4. 8. 02:35

www.acmicpc.net/problem/5052

 

5052번: 전화번호 목록

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

www.acmicpc.net

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

public class Main {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int T = Integer.parseInt(br.readLine());
		StringBuilder result = new StringBuilder();
		
		for(int tc = 0; tc<T; tc++) {
			int n = Integer.parseInt(br.readLine());
			HashSet<String> set = new HashSet<>();
			boolean isPhone = false;
			List<String> list = new ArrayList<>();
			
			//저장
			for(int i=0; i<n; i++) {
				String a = br.readLine();
				set.add(a);
				list.add(a);
			}
			
			for(int i=0; i<n; i++) {
				String str = list.get(i);
				StringBuilder sb = new StringBuilder();
				boolean flag = false;
				
                //일관성 검사
				for(int j=0; j<str.length()-1; j++) {
					sb.append(str.charAt(j));
					if(set.contains(sb.toString())) {
						flag = true;
						break;
					}
				}
				
				if(flag) {
					result.append("NO\n");
					isPhone = true;
					break;
				}
			}
            
           	//위에서 No가 아니기 때문에 Yes
			if(!isPhone) {
				result.append("YES\n");
			}
		}
		System.out.println(result.toString());
	}
}

정리

  • 입력 받을 때 Set에 저장
  • 전화번호를 하나씩 입력해서 Set에 있는지 검사 있다면 일관성이 없다.
  • str.length()-1까지 진행하였는데 입력 사항에 "목록에 있는 두 전화번호가 같은 경우는 없다."으로 검사할 필요가 없다.
Comments