[BaekJoon] 10775 ๊ณตํ•ญ (Java)

SeongWon Ohยท2021๋…„ 10์›” 31์ผ
0
post-thumbnail

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

https://www.acmicpc.net/problem/10775


๐Ÿ“ ๋ฌธ์ œ ์„ค๋ช…

ํ•ด๋‹น ๋ฌธ์ œ๋Š” Greedy๋กœ ๊ฐ ๋น„ํ–‰๊ธฐ์— ์ฃผ์–ด์ง„ gi๊ฐ’๋ณด๋‹ค ์ž‘์€ ์ˆ˜ ์ค‘์—์„œ ๋น„์–ด์žˆ๋Š” ๊ฒŒ์ดํŠธ์— ๋น„ํ–‰๊ธฐ๋ฅผ ์—ฐ๊ฒฐ์‹œํ‚ค๋ฉด ๋˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ Greedy๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€๊ฒŒ ๋œ๋‹ค๋ฉด ๋ฌธ์ œ์— ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์ œํ•œ์ด ์งง์•„ ์‹œ๊ฐ„์ดˆ๊ณผ๋ผ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฌธ์ œ๋ฅผ ํ†ต๊ณผ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์˜ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์™€ ๊ฐ™์ด Union-find ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๊ฐ๊ฐ์˜ parent๋ฅผ ํ†ตํ•ด ๋น„์–ด์žˆ๋Š” ์œ„์น˜๋ฅผ ์ฐพ์•„ ์—ฐ์‚ฐ์˜ ์‹œ๊ฐ„์„ ์ค„์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ์ž‘์„ฑํ•œ ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {

	static int[] parent;
	
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int G = Integer.parseInt(br.readLine());
		int P = Integer.parseInt(br.readLine());
		
		parent = new int[G+1];
		for (int i=0; i<=G; i++) parent[i] = i;
		
		int count = 0;
		for (int i=0; i<P; i++) {
			int g = Integer.parseInt(br.readLine());
			int parentGate = find(g);
			if (parentGate != 0) {
				count++;
				union(parentGate-1, parentGate);
			}
			else break;
		}
		System.out.println(count);
	}
	
	static int find(int g) {
		if (parent[g] == g) return g;
		return parent[g] = find(parent[g]);
	}
	
	static void union(int g1, int g2) {
		int p1 = find(g1);
		int p2 = find(g2);
		
		if (p1 < p2) parent[p2] = p1;
		else parent[p1] = p2;
	}
}

profile
๋ธ”๋กœ๊ทธ ์ด์ „ํ–ˆ์Šต๋‹ˆ๋‹ค. -> https://seongwon.dev/

0๊ฐœ์˜ ๋Œ“๊ธ€