๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 3018_์บ ํ”„ํŒŒ์ด์–ด

๋ฟŒ์•ผ._. 2024. 5. 17. 11:17

Silver III

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/3018)

< ์บ ํ”„ํŒŒ์ด์–ด >

 

๋ฌธ์ œ ํ’€์ด 

 

๊ฐ ์‚ฌ๋žŒ์ด ์•„๋Š” ๋…ธ๋ž˜๋ฅผ ArrayList <HashSet>์— ์ €์žฅํ•œ๋‹ค. ๋งŒ์•ฝ 1 = [2], 2 = [3], 3 = [1]์ธ ๊ฒฝ์šฐ 2๋ฒˆ๊ณผ 3๋ฒˆ์ด ์บ ํ”„ํŒŒ์ด์–ด์— ์ฐธ์—ฌํ–ˆ๋‹ค๋ฉด ์„œ๋กœ ์•„๋Š” ๋…ธ๋ž˜๋ฅผ ๊ณต์œ ํ•œ๋‹ค. ์„œ๋กœ ๊ณต์œ ํ•˜๋ฉด 1 = [2], 2 = [1,3], 3 = [1,3] ์ด ๋œ๋‹ค.

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.StringTokenizer;

public class _3018_ { // ์บ ํ”„ํŒŒ์ด์–ด

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;

		int n = Integer.parseInt(bf.readLine());
		int e = Integer.parseInt(bf.readLine());

		ArrayList<HashSet<Integer>> list = new ArrayList<>();
		for (int i = 0; i <= n; i++) {
			list.add(new HashSet<>());
		}

		int idx = 0;
		for (int i = 0; i < e; i++) {
			st = new StringTokenizer(bf.readLine());

			int k = Integer.parseInt(st.nextToken());
			int num[] = new int[k];
			boolean flag = false;
			for (int j = 0; j < k; j++) {
				num[j] = Integer.parseInt(st.nextToken());
				if (num[j] == 1) {
					flag = true;
				}
			}
			if (flag) {
				idx += 1;
				for (int j = 0; j < k; j++) {
					list.get(num[j]).add(idx);
				}
			} else {
				for (int j = 0; j < k; j++) {
					for (int l = 0; l < k; l++) {
						if (j == l) {
							continue;
						}
						for (int m : list.get(num[j])) {
							list.get(num[l]).add(m);
						}
					}
				}
			}
		}
		for (int i = 1; i <= n; i++) {
			if (list.get(i).size() == idx) {
				bw.write(i + "\n");
			}
		}
		bw.flush();
	}
}
๋ณ€์ˆ˜)
n : ์ฐธ๊ฐ€ํ•œ ์‚ฌ๋žŒ ์ˆ˜
e : ์กฐ๊ฑด ์ˆ˜
list : ArrayList <HashSet> ๊ฐ ์‚ฌ๋žŒ์ด ์•„๋Š” ๋…ธ๋ž˜ ๋ฒˆํ˜ธ
idx : ๋…ธ๋ž˜ ๋ฒˆํ˜ธ
k : ๊ทธ๋‚  ์บ ํ”„ํŒŒ์ด์–ด์— ์ฐธ๊ฐ€ํ•œ ์‚ฌ๋žŒ์˜ ์ˆ˜
num : ์ฐธ๊ฐ€ํ•œ ์‚ฌ๋žŒ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•œ ๋ฐฐ์—ด
flag : 1๋ฒˆ ์ฐธ๊ฐ€์—ฌ๋ถ€

 

์ฐธ๊ฐ€ํ•œ ์‚ฌ๋žŒ์˜ ์ˆ˜ n๊ณผ ์กฐ๊ฑด ๊ฐœ์ˆ˜ e๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. e๋งŒํผ ์บ ํ”„ํŒŒ์ด์–ด์— ์ฐธ๊ฐ€ํ•œ ์‚ฌ๋žŒ์˜ ์ˆ˜ k์™€ ์ฐธ๊ฐ€ํ•œ ์‚ฌ๋žŒ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ์ฐธ๊ฐ€ํ•œ ์‚ฌ๋žŒ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ num์— ์ €์žฅํ•˜๋ฉด์„œ 1๋ฒˆ์ด ์ฐธ๊ฐ€ํ–ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. 1๋ฒˆ์ด ์ฐธ๊ฐ€ํ–ˆ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ๋…ธ๋ž˜๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋ฏ€๋กœ ์ฐธ๊ฐ€ํ•œ ์‚ฌ๋žŒ๋“ค์˜ HashSet์— idx๋ฅผ ์ €์žฅํ•œ๋‹ค. 1๋ฒˆ์ด ์ฐธ๊ฐ€ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๊ฐ์ž ์•„๋Š” ๋…ธ๋ž˜๋ฅผ ์„œ๋กœ ๊ณต์œ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฐ์ž HashSet์„ ์ˆœํ™˜ํ•˜๋ฉฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ HashSet์— ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค. ์ตœ์ข… ArrayList๋ฅผ ์ˆœํ™˜ํ•˜๋ฉฐ ๊ฐ ์‚ฌ๋žŒ๋“ค์˜ HashSet์˜ size๊ฐ€ idx์™€ ์ผ์น˜ํ•œ๋‹ค๋ฉด ๋ชจ๋“  ๋…ธ๋ž˜๋ฅผ ์•„๋Š” ์‚ฌ๋žŒ์ด๋ฏ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.