๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 12893_์ ์˜ ์ 

๋ฟŒ์•ผ._. 2023. 6. 26. 11:12

Gold IV

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

< ์ ์˜ ์ >

 

๋ฌธ์ œ ํ’€์ด & ์ƒ๊ฐ

 

bfs๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์šฐํ˜ธ ๊ด€๊ณ„์™€ ์ ๋Œ€ ๊ด€๊ณ„๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.

 

 

 my solution (Java)

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

public class _12893_ { // ์ ์˜ ์ 
	static ArrayList<ArrayList<Integer>> arr;
	static boolean team[], visited[], flag;

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

		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());

		arr = new ArrayList<>();
		team = new boolean[n];
		visited = new boolean[n];
		flag = false;
		for (int i = 0; i < n; i++) {
			arr.add(new ArrayList<>());
		}

		for (int i = 0; i < m; i++) {
			st = new StringTokenizer(bf.readLine());
			int a = Integer.parseInt(st.nextToken()) - 1;
			int b = Integer.parseInt(st.nextToken()) - 1;
			arr.get(a).add(b);
			arr.get(b).add(a);
		}

		for (int i = 0; i < n; i++) {
			if (!visited[i]) {
				visited[i] = true;
				team[i] = true;
				search(i);
			}
		}
		if (flag)
			System.out.println(0);
		else
			System.out.println(1);
	}

	private static void search(int idx) {
		Queue<Integer> queue = new LinkedList<>();
		queue.add(idx);

		while (!queue.isEmpty()) {
			int num = queue.poll();
			for (int i = 0; i < arr.get(num).size(); i++) {
				int next = arr.get(num).get(i);
				if (!visited[next]) {
					visited[next] = true;
					team[next] = !team[num];
					queue.add(next);
				} else {
					if (team[num] != !team[next]) {
						flag = true;
						return;
					}
				}
			}
		}
	}
}

 

Main

- ์‚ฌ๋žŒ์˜ ์ˆ˜(n). ์ ๋Œ€๊ด€๊ณ„์˜ ์ˆ˜(m) ์ž…๋ ฅ

- arr : ์ ๋Œ€ ๊ด€๊ณ„ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ
  team : ์šฐํ˜ธ, ์ ๋Œ€ ๊ด€๊ณ„ ์ €์žฅ [true, false๋ผ๋ฆฌ ๊ฐ™์€ ํŒ€]
  visited : ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
  flag : ์ด๋ก  ์„ฑ๋ฆฝ ์—ฌ๋ถ€

- ์ ๋Œ€ ๊ด€๊ณ„์— ์žˆ๋Š” ์‚ฌ๋žŒ a, b ์ž…๋ ฅ ํ›„ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ์ €์žฅ

- ์‚ฌ๋žŒ์˜ ์ˆ˜๋งŒํผ ํƒ์ƒ‰ํ•˜์—ฌ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์ด๋ผ๋ฉด ๋ฐฉ๋ฌธ ํ‘œ์‹œ / team์„ true๋กœ ์ €์žฅ / search ํ•จ์ˆ˜ ํ˜ธ์ถœ

- flag ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์ด๋ก  ์„ฑ๋ฆฝ ๊ฐ€๋Šฅํ•œ์ง€ ์•„๋‹Œ์ง€ ์ถœ๋ ฅ

 

Search

- queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต -> num์˜ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ํƒ์ƒ‰ํ•˜์—ฌ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์ด๋ผ๋ฉด ๋ฐฉ๋ฌธ ํ‘œ์‹œ / ํ˜„์žฌ ์‚ฌ๋žŒ๊ณผ ์ ๋Œ€ ๊ด€๊ณ„๋กœ ํ‘œ์‹œ / queue์— ์ถ”๊ฐ€ But ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๊ณณ์ด๋ผ๋ฉด ์ ๋Œ€ ๊ด€๊ณ„๊ฐ€ ๋งž๋Š”์ง€ ํ™•์ธํ•˜์—ฌ ์ ๋Œ€ ๊ด€๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ด๋ก ์ด ์„ฑ๋ฆฝํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ข…๋ฃŒ