(Graph)Wedding

๋ฌธ์ œ ์„ค๋ช…

์ ‘๊ทผ ๋ฐฉ๋ฒ• - ์นœ๊ตฌ ๊ด€๊ณ„๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค. - 1์˜ ์ธ์ ‘๋…ธ๋“œ์™€ 1์˜ ์ธ์ ‘๋…ธ๋“œ์˜ ์ธ์ ‘๋…ธ๋“œ ๊ฐฏ์ˆ˜๋งŒ ์„ธ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— BFS/DFS๋Š” ๋ถˆํ•„์š”ํ•˜๋‹ค.

ํ‹€๋ฆฐ ์ด์œ  ์ดˆ๋Œ€ํ•  ์นœ๊ตฌ๋ฅผ ์นด์šดํŒ…ํ•  ๋•Œ ์ค‘๋ณต ์ฒดํฌ(๋ฐฉ๋ฌธ ์ฒดํฌ)๋ฅผ ํ•ด์ฃผ์–ด์•ผํ•˜๋Š”๋ฐ ํ•ด์ฃผ์ง€ ์•Š์•˜๋‹ค.

Solution ์šฐ๋ฆฌ๋Š” 1๋ฒˆ์˜ ์นœ๊ตฌ i์™€ i์˜ ์นœ๊ตฌ๋งŒ ๊ด€์‹ฌ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค!!!๐ŸŒŸ =>arr[1][i] == 1: ์นœ๊ตฌ ์ดˆ๋Œ€ if(!v[i]) ์ด๋ฉด i์ดˆ๋Œ€. arr[i][j] == 1 && !v[j] : ์นœ๊ตฌ์˜ ์นœ๊ตฌ ์ดˆ๋Œ€ 1. 2์ฐจ์› ๋ฐฐ์—ด์— ์นœ๊ตฌ ๊ด€๊ณ„ ์ €์žฅํ•œ๋‹ค. arr[i][j] : i์™€ j๊ฐ€ ์นœ๊ตฌ.(์˜๋ฏธํ•ด์„์ด ๋” ์ง๊ด€์ ์ด๋‹ค!) arr[1][i] = 1 : 1๊ณผ i๊ฐ€ ์นœ๊ตฌ๋ผ๋Š” ์˜๋ฏธ! i๋ฒˆ ์นœ๊ตฌ๋ฅผ ์ดˆ๋Œ€ํ•˜๋ฉด i๋ฒˆ ์นœ๊ตฌ j๋„ ์ดˆ๋Œ€ํ•˜๋ฏ€๋กœ arr[i][j] = 1์ด๋ฉด j๋„ ์ดˆ๋Œ€ํ•œ๋‹ค!

2. ์ด๋ฏธ ์ดˆ๋Œ€ํ•œ ์นœ๊ตฌ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด boolean ๋ฐฐ์—ด ํ•„์š”! ์ดˆ๋Œ€ํ•˜๊ธฐ ์ „์— ์ค‘๋ณต์ฒดํฌํ•˜๊ณ  ๋‚œ ํ›„์— ํ•ด์ค€๋‹ค!

๋А๋‚€ ์  ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ด ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ์นœ๊ตฌ ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•ด์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋” ๋น ๋ฅด๊ณ  ๊ฐ„๊ฒฐํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

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

public class Wedding_2nd {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int n = Integer.parseInt(br.readLine());
		int m = Integer.parseInt(br.readLine());
		int[][] friends = new int[n+1][n+1];
		boolean[] visit = new boolean[n+1];
		//๊ฐ„์„  ๊ฐฏ์ˆ˜๋งŒํผ ์นœ๊ตฌ๊ด€๊ณ„ ์ €์žฅ!
		for(int i=0;i<m;i++) {
			StringTokenizer st = new StringTokenizer(br.readLine()," ");
			int u = Integer.parseInt(st.nextToken());
			int v = Integer.parseInt(st.nextToken());
			friends[u][v] = 1;
			friends[v][u] = 1;
		}
		
		int cnt=0;
		for(int i=2;i<=n;i++) {
			if(friends[1][i]==1) {
				if(!visit[i]) {
					visit[i] = true;
					cnt++;
				}
				
				for(int j=2;j<=n;j++) {
					if(friends[i][j] == 1 && !visit[j]) {
						visit[j] = true;
						cnt++;
					}
				}
			}
		}
		System.out.println(cnt);
	}

}

1์˜ ์นœ๊ตฌ ์ดˆ๋Œ€ํ•˜๋Š” ๋ถ€๋ถ„์—์„œ if(friends[1][i] == 1 && !visit[i]) ์ด๋ ‡๊ฒŒ ์กฐ๊ฑด๋ฌธ์„ ๊ฑธ์–ด์„œ i๋ฅผ ์ดˆ๋Œ€ํ•˜๋ฉด ๋ ๊ฒƒ ๊ฐ™์ง€๋งŒ ์•„๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด ์กฐ๊ฑด๋ฌธ์€ ์•„๋ž˜์— i์˜ ์นœ๊ตฌ๋„ ์ดˆ๋Œ€ํ•˜๋Š” ๋ถ€๋ถ„๋„ ํฌํ•จํ•˜๋Š” ์กฐ๊ฑด๋ฌธ์ธ๋ฐ ์กฐ๊ฑด๋ฌธ์„ ์ €๋ ‡๊ฒŒ ๊ฑธ์–ด๋ฒ„๋ฆฌ๋ฉด 1์˜ ์นœ๊ตฌ 2์ดˆ๋Œ€(visit[2] = true) 2์˜ ์นœ๊ตฌ 3์ดˆ๋Œ€(visit[3] = true) 1์˜ ์นœ๊ตฌ 3 ์ฐจ๋ก€์—์„œ 3์€ ์ดˆ๋Œ€ํ•˜์ง€ ์•Š๋”๋ผ๋„ 3์˜ ์นœ๊ตฌ 4(์นœ๊ตฌ์˜ ์นœ๊ตฌ)๋ฅผ ์ดˆ๋Œ€ํ•˜๋Š” ๋ถ€๋ถ„์€ ์‹คํ–‰๋˜์–ด์•ผํ•˜๋Š”๋ฐ 2๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š์•„ ์ „์ฒด๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์•„์„œ ์˜ค๋‹ต์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค!

for(int i=2;i<=n;i++) {
			if(friends[1][i]==1) {
				if(!visit[i]) {
					visit[i] = true;
					cnt++;
				}
				
				for(int j=2;j<=n;j++) {
					if(friends[i][j] == 1 && !visit[j]) {
						visit[j] = true;
						cnt++;
					}
				}
			}
		}

Last updated

Was this helpful?