문제 풀이 및 개발 공간

[백준] 6328번 Erdos Numbers (gold 3 본문

백준공부/java

[백준] 6328번 Erdos Numbers (gold 3

gomduri43 2023. 9. 19. 16:09

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int t=0;
        while(true){
            t++;
            StringTokenizer st=new StringTokenizer(br.readLine());
            int p=Integer.valueOf(st.nextToken());
            int n=Integer.valueOf(st.nextToken());
            if(p+n==0){
                break;
            }
            HashMap<String, ArrayList<String>> dict=new HashMap<>();
            HashMap<String, Integer> rel=new HashMap<>();
            for(int i=0; i<p; i++){
                String temp=br.readLine();
                String[] a=temp.split(",|:"); //split에서 | 기호를 통해서 여러구분자 사용법 까먹지않기!
                for(int j=0; j<a.length-1; j+=2){
                    temp=a[j].strip().concat(","+a[j+1]);
                    if(dict.get(temp)==null){
                        dict.put(temp,new ArrayList<>());
                        rel.put(temp,0);
                    }
                    for(int k=0; k<a.length-1; k+=2){
                        if(k!=j){
                            dict.get(temp).add(a[k].strip().concat(","+a[k+1]));
                        }
                    }
                }
            }

            Queue<String> que=new LinkedList<>();
            que.offer("Erdos, P.");
            while(!que.isEmpty()){
                String temp=que.poll();
                ArrayList<String> arr=new ArrayList<>(dict.get(temp));
                for(int i=0; i<arr.size(); i++){
                    if(!arr.get(i).equals("Erdos, P.") && rel.get(arr.get(i))==0){
                        rel.put(arr.get(i), rel.get(temp)+1);
                        que.offer(arr.get(i));
                    }
                }
            }
            bw.write("Database #"+t+"\n");
            for(int i=0; i<n; i++) {
                String quiz = br.readLine();
                if ((rel.get(quiz)==null || rel.get(quiz) == 0) && !quiz.equals("Erdos, P.")) {
                    bw.write(quiz + ": "+"infinity\n");
                }
                else {
                    bw.write(quiz + ": " + rel.get(quiz) + "\n");
                }
            }
            bw.write("\n"); //테스트케이스 나누어지면서 분류 출력할때 꼭 쓰기//
        }
        bw.flush();
    }
}