[Java]BaekJoon.AC

[Java]백준 BaekJoon.AC 1043 : 거짓말 (ArrayList)

스뇨잉 2021. 12. 7. 18:11
728x90
728x90

 

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

 

1043번: 거짓말

지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게

www.acmicpc.net

 

 

워낙 데인적이 많아서.. 삼고초려하고 돌다리 엄청 두드린거 치고 쉽게 풀렸다..!

앞선 문제와 더불어 속도가 빨라진거 같아서 조큼 뿌듯..?(문제가 쉬웠던 것도 있지만.. 좋게 생각해야지)

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {
	
	static int N, M;
	static ArrayList<Integer> trueMan = new ArrayList<>();
	static ArrayList<Integer>[] party;
	static boolean[] lie;
	
    public static void main(String[] args) throws IOException {
        
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	StringTokenizer st = new StringTokenizer(br.readLine());
    	
    	N = Integer.parseInt(st.nextToken()); //사용X
    	M = Integer.parseInt(st.nextToken());
    	
    	st = new StringTokenizer(br.readLine());
    	int trueN = Integer.parseInt(st.nextToken());
    	
    	if(trueN==0) {
    		System.out.print(M);
    		return;
    	}
    	
    	for(int i=0; i<trueN; i++) {
    		int person = Integer.parseInt(st.nextToken());
    		trueMan.add(person);
    	}
    	
    	
    	party = new ArrayList[M];
    	lie = new boolean[M];
    	for(int i=0; i<M; i++) {
    		st = new StringTokenizer(br.readLine());
    		int partyN = Integer.parseInt(st.nextToken());
    		
    		party[i] = new ArrayList<>();
    		
    		for(int j=0; j<partyN; j++) {
    			int attend = Integer.parseInt(st.nextToken());
    			party[i].add(attend);
    		}
    	}
    	
    	talk();
    	
    	int result = 0;
    	for(int i=0; i<M; i++) {
    		if(lie[i]==false) {
    			result = result + 1;
    		}
    	}
    	
    	System.out.print(result);
    }
    
    public static void talk() {
    	
    	int past = trueMan.size();
    	
    	for(int i=0; i<trueMan.size(); i++) {
    		for(int j=0; j<M; j++) {
    			for(int m=0; m<party[j].size(); m++) {
    				
    				if(party[j].get(m) == trueMan.get(i)) {
    					lie[j] = true;
    					for(Integer a : party[j]) {
    						if(!trueMan.contains(a)) {
    							trueMan.add(a);
    						}
    					}
    				}
    				
    			}
    		}
    	}
    	
    	if(past!=trueMan.size()) {
    		talk();
    	}
    }
}

 

728x90
728x90