반응형
12-24 20:16
Today
Total
«   2024/12   »
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
관리 메뉴

개발하는 고라니

[백준] 5567번 : 결혼식 본문

Programming/백준

[백준] 5567번 : 결혼식

조용한고라니 2021. 2. 17. 15:30
반응형
 

5567번: 결혼식

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

www.acmicpc.net


[BFS]

이 문제를 depth가 2 이하인 곳만 탐색하는 DFS로 풀어보려 했으나 

6

5

1 2

1 3

3 4

2 3

4 5

의 예제 입력에서, 3 -> 4를 도달하지 못한다. 1->2 그리고 2->3을 방문하기 때문에 1 -> 3, 3 -> 4를 가지 못하는 것이다. 이미 3 정점을 방문했기 때문이다.

 

그래서 한 층씩 탐색하는 BFS가 가장 적합한 방법이라고 생각된다.

# Code </>

public class Main {

    static class Element{
        int v, floor;
        public Element(int vv, int f){
            v=vv; floor = f;
        }
    }
    static List<Integer>[] list = new ArrayList[501];
    static boolean[] visit = new boolean[501];
    static int cnt = 0;

    static void BFS(int v){

        Queue<Element> Q = new LinkedList<>();
        visit[v] = true;
        Q.add(new Element(v, 0));

        while(!Q.isEmpty()){
            Element e = Q.poll();
            int current = e.v;
            int floor = e.floor;

            for(int next : list[current])
                if(!visit[next] && floor + 1 <= 2){
                
                    cnt++;
                    visit[next] = true;
                    
                    Q.add(new Element(next, floor + 1));
                }
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        int m = Integer.parseInt(br.readLine());

        for(int i=1; i<=n; i++) list[i] = new ArrayList<>();

        for(int i=1; i<=m; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            int h = Integer.parseInt(st.nextToken());
            int t = Integer.parseInt(st.nextToken());

            list[h].add(t);
            list[t].add(h);
        }

        BFS(1);
        System.out.println(cnt);
    }
}
반응형

'Programming > 백준' 카테고리의 다른 글

[백준] 4179번 : 불!  (0) 2021.02.19
[백준] 1726번 : 로봇  (0) 2021.02.19
[백준] 5427번 : 불  (0) 2021.02.17
[백준] 13913번 : 숨바꼭질 4  (0) 2021.02.17
[백준] 1600번 : 말이 되고픈 원숭이  (0) 2021.02.17
Comments