๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 5107_๋งˆ๋‹ˆ๋˜

๋ฟŒ์•ผ._. 2024. 3. 1. 14:04

Silver I

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

< ๋งˆ๋‹ˆ๋˜ >

 

๋ฌธ์ œ ํ’€์ด 

 

๊ฐ ๊ด€๊ณ„๋ฅผ ๋ฐฐ์—ด๋กœ ์ €์žฅํ•œ ํ›„ ์—ฐ๊ฒฐ ๊ณ ๋ฆฌ๋ฅผ ์ฐพ๋Š”๋‹ค.

 

 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.StringTokenizer;

public class _5107_ { // ๋งˆ๋‹ˆ๋˜
	static boolean visited[];
	static int[] arr;

	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;
		int cnt = 1;
		while ((n = Integer.parseInt(bf.readLine())) != 0) {
			ArrayList<String> list = new ArrayList<>();
			visited = new boolean[n];
			arr = new int[n];

			for(int i=0; i<n; i++) {
				st = new StringTokenizer(bf.readLine());
				String a = st.nextToken();
				String b = st.nextToken();

				if (!list.contains(a)) {
					list.add(a);
				}
				if (!list.contains(b)) {
					list.add(b);
				}
				arr[list.indexOf(a)] = list.indexOf(b);	
			}

			int result = 0;
			for (int i = 0; i < n; i++) {
				if (!visited[i]) {
					visited[i] = true;
					result += 1;

					search(i);
				}
			}
			bw.write(cnt++ + " " + result + "\n");
		}
		bw.flush();
	}

	private static void search(int num) {
		if (!visited[arr[num]]) {
			visited[arr[num]] = true;
			search(arr[num]);
		}
	}
}
๋ณ€์ˆ˜)
n : ์‚ฌ๋žŒ์˜ ๋ช…์ˆ˜
cnt : ์ผ€์ด์Šค ๋ฒˆํ˜ธ
list : ์‚ฌ๋žŒ ๋ฒˆํ˜ธ
visited : ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
arr : ๋งˆ๋‹ˆ๋˜ ๊ด€๊ณ„
a, b : ๋‘ ์‚ฌ๋žŒ์˜ ์ด๋ฆ„
result : ์—ฐ๊ฒฐ ๊ณ ๋ฆฌ์˜ ๊ฐœ์ˆ˜

 

์‚ฌ๋žŒ์˜ ๋ช…์ˆ˜๊ฐ€ 0์ด ์•„๋‹ ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

1) ์‚ฌ๋žŒ์˜ ์ˆ˜๋งŒํผ ๋‘ ์‚ฌ๋žŒ์˜ ์ด๋ฆ„์„ ์ž…๋ ฅ๋ฐ›์•„ ๋งˆ๋‹ˆ๋˜ ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ด๋•Œ ์ด๋ฆ„์„ ์ž…๋ ฅ๋ฐ›์€ ๊ฒƒ์„ ํŽธํ•˜๊ฒŒ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ArrayList์— ๋จผ์ € ์ €์žฅํ•ด index ๋ฒˆํ˜ธ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. arr๋ฐฐ์—ด์— list์˜ index ๋ฒˆํ˜ธ๋กœ ๋งˆ๋‹ˆ๋˜ ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•œ๋‹ค.

2) ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์‚ฌ๋žŒ๋“ค์„ ๋ฐฉ๋ฌธํ•˜์—ฌ ์—ฐ๊ฒฐ ๊ณ ๋ฆฌ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด search ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

3) ํ•ด๋‹น ์ผ€์ด์Šค ๋ฒˆํ˜ธ์™€ ์—ฐ๊ฒฐ ๊ณ ๋ฆฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

search(index)

๋งˆ๋‹ˆ๋˜์˜ ๋งˆ๋‹ˆ๋˜๋ฅผ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ฐฉ๋ฌธ ํ›„ search ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.