ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 5567 결혼식
    카테고리 없음 2020. 12. 6. 17:35

    www.acmicpc.net/problem/5567

     

    5567번: 결혼식

    2와 3은 상근이의 친구이다. 또, 3과 4는 친구이기 때문에, 4는 상근이의 친구의 친구이다. 5와 6은 친구도 아니고, 친구의 친구도 아니다. 따라서 2,3,4 3명의 친구를 결혼식에 초대한다.

    www.acmicpc.net

    2020-12-06


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Queue;
    import java.util.Scanner;
     
    public class Main5567 {
        public static int N, M, answer;
        public static List<List<Integer>> list;
        public static Queue<Integer> q;
        public static boolean vtd[];
        
        public static void solve() {
            int time = 0;
            loop:while(!q.isEmpty()) {
                int size = q.size();
                while(size > 0) {
                    int x = q.poll();
                    
                    for(int i : list.get(x)) {
                        if(!vtd[i]) {
                            q.add(i);
                            vtd[i] = true;
                            answer++;
                        }
                    }
                    size--;
                }
                time++;
                if(time == 2break loop;
            }
        }
        
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            N = sc.nextInt();
            M = sc.nextInt();
            
            list = new ArrayList<>();
            q = new LinkedList<Integer>();
            vtd = new boolean[N+1];
            
            answer = 0;
            for(int i = 0; i <= N; i++) list.add(new ArrayList<>());
            
            for(int i = 0; i < M; i++) {
                int a = sc.nextInt();
                int b = sc.nextInt();
                list.get(a).add(b);
                list.get(b).add(a);
            }
            
            vtd[1= true;
            q.add(1);
            solve();
            
            System.out.println(answer);
            
        }
    }
     
    cs

     

    #문제풀이

    1. 서로 친구인 경우 연결한다.

     

    2. 상근이의 학번인 1을 기준으로 친구들을 체크하면서, 친구의 친구까지만 결혼식에 초대할 수 있으므로 depth가 2일때까지만 체크한다. 

     

    #체크포인트

    1. 런타임 에러

    - 처음 제출하자마자 런타임 에러가 떠서 문제 입력값을 다시 체크해봤다. 동기의 수 n (2 ≤ n ≤ 500)이라는 조건이 있고 상근이의 학번이 1부터 시작하므로 arraylist가 N만큼 들어가야한다. 

    댓글

Programming Diary