-
[Union-Find] BOJ 10775 ๊ณตํญAlgorithms in Python/baekjoon 2021. 2. 8. 01:31
๐ ๋ฐฑ์ค 10775 ๊ณตํญ
โ ๋ฌธ์ ์ ํต์ฌ, ํ์ด ๊ณผ์
• ๊ณตํญ์๋ G๊ฐ์ ๊ฒ์ดํธ๊ฐ ์์ผ๋ฉฐ ๊ฐ๊ฐ์ 1์์ G๊น์ง์ ๋ฒํธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
• ๊ณตํญ์๋ P๊ฐ์ ๋นํ๊ธฐ๊ฐ ์์๋๋ก ๋์ฐฉํ ์์ ์ด๋ฉฐ, i๋ฒ์งธ ๋นํ๊ธฐ๋ฅผ 1๋ฒ๋ถํฐ gi (1 ≤ gi ≤ G) ๋ฒ์งธ ๊ฒ์ดํธ์ค ํ๋์ ์๊ตฌ์ ์ผ๋ก ๋ํนํ๋ ค ํ๋ค.
• ๊ฐ์ฅ ๋ง์ ๋นํ๊ธฐ๋ฅผ ๊ณตํญ์ ๋ํน์์ผ์ผ ํ๋ค.
=> ๋ํนํ๋ ๊ณผ์ ์ ํ์น๊ตฌ ๊ฐ์ ํฉ์งํฉ ์ฐ์ฐ์ผ๋ก ์๊ฐํ๋ค. ๊ฐ ํ์น๊ตฌ๋ฅผ ์๋ก๋ค๋ฅธ ์งํฉ์ผ๋ก ์ด๊ธฐํํ๋ค.
=> ์๋กญ๊ฒ ๋ํน์ด ๋๋ฉด, ์ผ์ชฝ์ ์งํฉ๊ณผ ํฉ์น๋ค. ์งํฉ์ ๋ฃจํธ๊ฐ 0์ด๋ฉด ๋ ์ด์ ๋ํน์ด ๋ถ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ํ๋จํ๋ค.
• ๋นํ๊ธฐ๊ฐ ์ด๋ ๊ฒ์ดํธ์๋ ๋ํนํ ์ ์๋ค๋ฉด ๊ณตํญ์ด ํ์๋๊ณ , ์ดํ ์ด๋ค ๋นํ๊ธฐ๋ ๋์ฐฉํ ์ ์๋ค.
=> ์งํฉ์ ๋ฃจํธ๊ฐ 0์ด๋ฉด ๋นํ๊ธฐ ์๋ฅผ ์ถ๋ ฅํ๊ณ ์ข ๋ฃํ๋ค.
โ ์ ์ฒด ์ฝ๋
import sys input = sys.stdin.readline def find_parent(parent, x): if parent[x] != x: parent[x] = find_parent(parent, parent[x]) return parent[x] def union_parent(parent, a, b): a = find_parent(parent, a) b = find_parent(parent, b) if a < b: parent[b] = a else: parent[a] = b g = int(input()) p = int(input()) parent = [0] * (g + 1) for i in range(1, g + 1): parent[i] = i result = 0 for _ in range(p): data = find_parent(parent, int(input())) if data == 0: break union_parent(parent, data, data - 1) result += 1 print(result)
* ์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค with ํ์ด์ฌ - ๋๋๋น
'Algorithms in Python > baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Impl] BOJ 3190 ๋ฑ (0) 2021.02.22 [Dijkstra] BOJ 1261 ์๊ณ ์คํ (0) 2021.02.15 [Stack] BOJ 17299 ์ค๋ฑํฐ์ (0) 2021.02.03 [Prefix Sum] BOJ 20002 ์ฌ๊ณผ๋๋ฌด (0) 2021.02.03 [Sliding Window] BOJ 10025 ๊ฒ์ผ๋ฅธ ๋ฐฑ๊ณฐ (0) 2021.02.03