본문 바로가기
코딩 문제 풀이/백준

[백준] 자바 문제 풀이 1043 : 골드4

by 코딩하는 랄로 2023. 9. 19.
728x90
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		StringTokenizer str = new StringTokenizer(br.readLine(), " ");
		int n = Integer.parseInt(str.nextToken());
		int p = Integer.parseInt(str.nextToken());

		int[][] plist = new int[p + 1][n + 1];

		str = new StringTokenizer(br.readLine(), " ");
		int fact = Integer.parseInt(str.nextToken());
		for (int i = 1; i <= fact; i++) {
			int k = Integer.parseInt(str.nextToken());
			plist[0][k] = k;
		}

		for (int i = 1; i <= p; i++) {
			str = new StringTokenizer(br.readLine(), " ");
			int j = Integer.parseInt(str.nextToken());
			for (int k = 0; k < j; k++) {
				int l = Integer.parseInt(str.nextToken());
				plist[i][l] = l;
			}
		}

		int[] mark = new int[p + 1];
		for (int i = 1; i <= p; i++) {
			if(mark[i] == 1) continue;
			for (int j = 1; j <= n; j++) {
				if (plist[i][j] == 0)
					continue;

				int k = plist[i][j];
				if (plist[0][k] != 0) {
					mark[i] = 1;
					boolean add = false;
					for (int a = 0; a <= n; a++) {
						if (plist[i][a] == 0)
							continue;
						if (plist[0][plist[i][a]] == 0) {
							plist[0][plist[i][a]] = plist[i][a];
							add = true;
						}
					}
					
					if(add) {
						i = 0;
					}
					break;
				}
			}
		}
		int cnt = 0;
		for(int i = 1; i <= p; i++)
			if(mark[i] != 1)
				cnt++;
		
		System.out.println(cnt);
	}
}
728x90