๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 24571_Good Groups

๋ฟŒ์•ผ._. 2025. 9. 18. 13:45
๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/24571)

< Good Groups >

 

๋ฌธ์ œ ํ’€์ด 

 

HashMap ๊ฐ๊ฐ์— ๊ฐ™์€ ์กฐ์— ์†ํ•ด์žˆ์–ด์•ผ ํ•˜๋Š” ํ•™์ƒ๋“ค๊ณผ, ๊ฐ™์€ ์กฐ์— ์†ํ•ด์žˆ์œผ๋ฉด ์•ˆ๋˜๋Š” ํ•™์ƒ๋“ค์„ ์ €์žฅํ•œ๋‹ค.

์กฐ๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉฐ ์ œ์•ฝ ์กฐ๊ฑด์„ ์œ„๋ฐ˜ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

* ์ œ์•ฝ ์กฐ๊ฑด์— ์ด๋ฆ„์ด ์ค‘๋ณต๋  ์ˆ˜ ์žˆ๋‹ค.

 

my solution (Java)

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

public class _24571_ { // Good Groups

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

		int x = Integer.parseInt(bf.readLine());

		HashMap<String, ArrayList<String>> same = new HashMap<>();
		for (int i = 0; i < x; i++) {
			st = new StringTokenizer(bf.readLine());

			String a = st.nextToken();
			String b = st.nextToken();

			if (same.containsKey(a)) {
				same.get(a).add(b);
			} else {
				ArrayList<String> list = new ArrayList<>();
				list.add(b);

				same.put(a, list);
			}

			if (same.containsKey(b)) {
				same.get(b).add(a);
			} else {
				ArrayList<String> list = new ArrayList<>();
				list.add(a);

				same.put(b, list);
			}
		}

		int y = Integer.parseInt(bf.readLine());

		HashMap<String, ArrayList<String>> diff = new HashMap<>();
		for (int i = 0; i < y; i++) {
			st = new StringTokenizer(bf.readLine());

			String a = st.nextToken();
			String b = st.nextToken();

			if (diff.containsKey(a)) {
				diff.get(a).add(b);
			} else {
				ArrayList<String> list = new ArrayList<>();
				list.add(b);

				diff.put(a, list);
			}

			if (diff.containsKey(b)) {
				diff.get(b).add(a);
			} else {
				ArrayList<String> list = new ArrayList<>();
				list.add(a);

				diff.put(b, list);
			}
		}

		int g = Integer.parseInt(bf.readLine());

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

			ArrayList<String> list = new ArrayList<>();

			while (st.hasMoreTokens()) {
				list.add(st.nextToken());
			}

			for (int j = 0; j < list.size(); j++) {
				ArrayList<Integer> temp = new ArrayList<>();
				if (same.containsKey(list.get(j))) {
					for (int k = 0; k < same.get(list.get(j)).size(); k++) {
						if (!list.contains(same.get(list.get(j)).get(k))) {
							result += 1;
							temp.add(k);
						}
					}
					for (int k = temp.size() - 1; k >= 0; k--) {
						same.get(same.get(list.get(j)).get(temp.get(k))).remove(list.get(j));
						same.get(list.get(j)).remove(temp.get(k));
					}
				}

				temp.clear();
				if (diff.containsKey(list.get(j))) {
					for (int k = 0; k < diff.get(list.get(j)).size(); k++) {
						if (list.contains(diff.get(list.get(j)).get(k))) {
							result += 1;
							temp.add(k);
						}
					}
					for (int k = temp.size() - 1; k >= 0; k--) {
						diff.get(diff.get(list.get(j)).get(temp.get(k))).remove(list.get(j));
						diff.get(list.get(j)).remove(temp.get(k));
					}
				}
			}
		}
		System.out.println(result);
	}
}
๋ณ€์ˆ˜)
x : ๊ฐ™์€ ์กฐ์— ์†ํ•ด์•ผ ํ•  ํ•™์ƒ๋“ค์˜ ์กฐ๊ฑด ๊ฐœ์ˆ˜
same : ๊ฐ™์€ ์กฐ์— ์†ํ•ด์•ผ ํ•˜๋Š” ์ œ์•ฝ์‚ฌํ•ญ
a, b : ํ•™์ƒ ์ด๋ฆ„
y : ๋‹ค๋ฅธ ์กฐ์— ์†ํ•ด์•ผ ํ•  ํ•™์ƒ๋“ค์˜ ์กฐ๊ฑด ๊ฐœ์ˆ˜
diff : ๋‹ค๋ฅธ ์กฐ์— ์†ํ•ด์•ผ ํ•˜๋Š” ์ œ์•ฝ์‚ฌํ•ญ
g : ๋ฐ˜์— ์žˆ๋Š” ์กฐ์˜ ๊ฐœ์ˆ˜
temp : ์œ„๋ฐ˜ํ•œ ์ œ์•ฝ์‚ฌํ•ญ
result : ์œ„๋ฐ˜ํ•œ ์ œ์•ฝ์‚ฌํ•ญ ๊ฐœ์ˆ˜

 

๊ฐ™์€ ์กฐ์— ์†ํ•ด์•ผ ํ•  ํ•™์ƒ๋“ค์˜ ์กฐ๊ฑด ๊ฐœ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ  ๊ทธ ๊ฐœ์ˆ˜๋งŒํผ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ž…๋ ฅ๋ฐ›์•„ HashMap์— ์ €์žฅํ•œ๋‹ค. ์ด๋•Œ, ์ด๋ฆ„์ด ์ค‘๋ณต๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ key๊ฐ’์œผ๋กœ String, value๋กœ ArrayList๋ฅผ ์ €์žฅํ•˜๋ฉฐ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ €์žฅํ•œ๋‹ค. 

 

๋‹ค๋ฅธ ์กฐ์— ์†ํ•ด์•ผ ํ•  ํ•™์ƒ๋“ค์˜ ์กฐ๊ฑด ๊ฐœ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ  ๊ทธ ๊ฐœ์ˆ˜๋งŒํผ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ž…๋ ฅ๋ฐ›์•„ HashMap์— ์ €์žฅํ•œ๋‹ค. ์œ„์™€ ๋งˆ์ฐฌ๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ์ €์žฅํ•œ๋‹ค.

 

๋ฐ˜์— ์žˆ๋Š” ์กฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๊ทธ ๊ฐœ์ˆ˜๋งŒํผ ์กฐ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ์กฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ์ œ์•ฝ ์กฐ๊ฑด์„ ์œ„๋ฐ˜ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. 

 

์ตœ์ข… ์œ„๋ฐ˜ํ•œ ์ œ์•ฝ์‚ฌํ•ญ ๊ฐœ์ˆ˜์ธ result๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.



 

'๐ŸŒžAlgorithm > ๐Ÿ”ฅBaekjoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Baekjoon] 11260_Cell Counting  (0) 2025.09.17
[Baekjoon] 11419_Olympic Parade  (0) 2025.09.15
[Baekjoon] 21508_ะกะฟะธัะพะบ ัˆะบะพะป  (0) 2025.09.12
[Baekjoon] 17873_Regional Team Names  (0) 2025.09.11
[Baekjoon] 15832_Aku Negaraku  (0) 2025.09.10