ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Baekjoon] 11725번 트리의 부모 찾기 (Java)
    Java/Baekjoon 2022. 8. 28. 22:41

    예제 입력1

    7
    1 6
    6 3
    3 5
    4 1
    2 4
    4 7

    예제 출력1

    4
    6
    1
    3
    1
    4

     

     

    예제 입력2

    12
    1 2
    1 3
    2 4
    3 5
    3 6
    4 7
    4 8
    5 9
    5 10
    6 11
    6 12

    예제 출력2

    1
    1
    2
    3
    3
    4
    4
    5
    5
    6
    6

     

     

    package Q11725;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.LinkedList;
    import java.util.Queue;
    
    public class Main {
        static ArrayList<ArrayList<Integer>> arr;
        static int[] parent;
    
        public static void main(String[] args) throws IOException{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int num = Integer.parseInt(br.readLine());
            parent = new int[num+1];
    
            arr = new ArrayList<>();
            for(int i = 0; i<=num; i++)
            	arr.add(new ArrayList<>());
    
            for(int i = 0; i<num - 1; i++){
                String[] st = br.readLine().split(" ");
    
                int from = Integer.parseInt(st[0]);	
                int to = Integer.parseInt(st[1]);
    
                arr.get(from).add(to);		// 인덱스 from에 to 추가
                arr.get(to).add(from);		// 인덱스 to에 from 추가
            }
            bfs();
            for(int i = 2; i<=num; i++)
                System.out.println(parent[i]);
        }
    
        static void bfs(){
            Queue<Integer> queue = new LinkedList<>();
            queue.offer(1);
            // offer() 삽입
    		// remove() = poll() 삭제
    		// element() = peek() 맨앞
    
            while(!queue.isEmpty()){
                int num = queue.poll();		// pop
    
                for(int i = 0; i < arr.get(num).size(); i++){	// 인덱스num의 크기만큼 반복(연결된 노드 수)
                    int next = arr.get(num).get(i);				// next: arr의 인덱스 num에 있는 것 중에 인덱스 i번째 있는 수
                    if(parent[next] == 0){						// parent 배열 인덱스 next에 아무것도 없다면
                    	parent[next] = num;						// num 추가
                    	queue.offer(next);						// 큐에 next 삽입
                    }
                }
            }
        }
    }

     

    728x90

    'Java > Baekjoon' 카테고리의 다른 글

    [Baekjoon] 16953번 A -> B (Java)  (0) 2022.08.29
    [Baekjoon] 1991번 트리 순회 (Java)  (0) 2022.08.29
    [Baekjoon] 15652번 N과 M(4) (Java)  (0) 2022.08.28
    [Baekjoon] 15650번 N과 M(2) (Java)  (0) 2022.08.28
    [Baekjoon] 2407번 조합(Java)  (0) 2022.08.27
Designed by Tistory.