반응형

 

[광고 누르면 오늘의 행운 상승!!]

https://www.acmicpc.net/problem/5567

 

5567번: 결혼식

문제 상근이는 자신의 결혼식에 학교 동기 중 자신의 친구와 친구의 친구를 초대하기로 했다. 상근이의 동기는 모두 N명이고, 이 학생들의 학번은 모두 1부터 N까지이다. 상근이의 학번은 1이다. 상근이는 동기들의 친구 관계를 모두 조사한 리스트를 가지고 있다. 이 리스트를 바탕으로 결혼식에 초대할 사람의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 상근이의 동기의 수 n (2 ≤ n ≤ 500)이 주어진다. 둘째 줄에는 리스트의 길이 m (1 ≤ m

www.acmicpc.net

쉬운 그래프 문제

1. 주어진 갯수만큼 노드를 생성한다.

2. 그래프에 간선을 받아서 저장한다.

3. 0번째 노드부터 cnt가 2까지 이동하면서 visit 을 true 시킨다.

4. 총 true된 visit의 갯수를 구한다.

package Study0319;

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

public class 결혼식 {
	
	public static boolean[] visit;
	public static ArrayList<ArrayList<Integer>> graph;
	public static int N,M,ans;
	public static void main(String[] args) throws Exception {
		System.setIn(new FileInputStream("test.txt"));
		Scanner sc = new Scanner(System.in);

		N = sc.nextInt();
		M = sc.nextInt();
		visit = new boolean[N+1];
		graph = new ArrayList<>();
		
		for (int i = 0; i < N; i++) {
			graph.add(new ArrayList<Integer>());
		}
		for (int i = 0; i < M; i++) {
			int A = sc.nextInt();
			int B = sc.nextInt();
			
			graph.get(A).add(B);
			graph.get(B).add(A);
		}
		
		dfs(1,0);
		for (int i = 0; i < N; i++) {
			if(visit[i]) ans++;
		}
		System.out.println(ans-1);
	}
	private static void dfs(int i, int cnt) {
		if(cnt == 2) {
			return;
		}
		
		for(Integer n : graph.get(i)) {
			visit[n] = true;
			dfs(n, cnt+1);
		}
	}
}
반응형

+ Recent posts