-
[๋ฐฑ์ค] 10775 ๊ณตํญ with PythonPS 2021. 10. 13. 23:23728x90๋ฐ์ํ
๐ BOJ 10775 ๊ณตํญ
๐ก ์กฐ๊ฑด ๋ฐ ํ์ด
- ๊ณตํญ์๋
G๊ฐ์ ๊ฒ์ดํธ
๊ฐ ์์ผ๋ฉฐ ๊ฐ๊ฐ์1์์ G๊น์ง์ ๋ฒํธ
๋ฅผ ๊ฐ์ง๊ณ ์๋ค. - ๊ณตํญ์๋ P๊ฐ์ ๋นํ๊ธฐ๊ฐ ์์๋๋ก ๋์ฐฉํ ์์ .
i๋ฒ์งธ ๋นํ๊ธฐ
๋ฅผ 1๋ฒ๋ถํฐgi (1 โค gi โค G)
๋ฒ์งธ ๊ฒ์ดํธ์ค ํ๋์ ์๊ตฌ์ ์ผ๋ก ๋ํน- ๋นํ๊ธฐ๊ฐ ์ด๋ ๊ฒ์ดํธ์๋ ๋ํนํ ์ ์๋ค๋ฉด ๊ณตํญ์ด ํ์๋๊ณ , ์ดํ ์ด๋ค ๋นํ๊ธฐ๋ ๋์ฐฉํ ์ ์๋ค.
- Union - Find ์๊ณ ๋ฆฌ์ฆ ์ ํ์ ๋ฌธ์
- ๋นํ๊ธฐ๋ฅผ ์ต๋ ๋ช ๋ ๋ํน์ํฌ ์ ์๋์ง ๊ตฌํ๋ ๋ฌธ์ .
๊ฒ์ดํธ์ ์ G (1 โค G โค 105)
๋นํ๊ธฐ์ ์ P (1 โค P โค 105)
P๊ฐ์ ์ค์ gi (1 โค gi โค G)
๐ฅ ์์ค ์ฝ๋
from sys import stdin 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[a] = b else: parent[b] = a g = int(stdin.readline()) p = int(stdin.readline()) parent = [x for x in range(g + 1)] res = 0 for i in range(p): gi = int(stdin.readline()) data = find_parent(parent, gi) if data == 0: break res += 1 union_parent(parent, data, data - 1) print(res)
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
4 3 4 1 1
์คํ๊ฒฐ๊ณผ
2
โจ๏ธ ๋ฌธ์ ํ์ด
๊ฐ ๋นํ๊ธฐ์ ๋ฒํธ๋ฅผ ์ ๋ ฅ ๋ฐ์ ๋ 1๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ ๊ฒ์ดํธ ์ + 1 ๋งํผ ๋ฐฐ์ด parent ๋ฅผ ์์ฑํ๋ค.
๋ฐฐ์ด์ ์์๊ฐ์ ๊ฐ ์ธ๋ฑ์ค ๊ฐ๊ณผ ๋์ผํ๊ฒ ํ๋๋ฐ, ์ด๊ฒ์ ๋ถ๋ชจ๋ฅผ ์์ ์ผ๋ก ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ข๋ค.
๋นํ๊ธฐ์ ๋ฒํธ gi ๋ฅผ ์ ๋ ฅ ๋ฐ์ gi์ ๋ถ๋ชจ๋ฅผ ์ฐพ๋๋ค.
data = find_parent(parent, gi)
๋ง์ฝ data ๊ฐ ์กด์ฌํ์ง ์๋ 0๋ฒ ๊ฒ์ดํธ์ ๋ํน์ ํด์ผํ ๊ฒฝ์ฐ ๋ฐ๋ณต๋ฌธ์ ์ค๋จํ๋ค.
4๋ฒ ์ด ์๋๋ผ๋ฉด res += 1.
gi ๋ฒ ๋นํ๊ธฐ๊ฐ data ๋ฒ ๊ฒ์ดํธ์ ๋ํน์ ํ๊ณ , ๊ทธ ๊ฒ์ดํธ์๋ ๋ค๋ฅธ ๋นํ๊ธฐ๊ฐ ๋ํน ํ ์ ์์ผ๋
data - 1 ๋ฒํธ์ ๊ฒ์ดํธ๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒ์ดํธ๊ฐ ๋๋ค๊ณ ์๊ฐํ์.union_parent(parent, data, data - 1)
์์๋๋ก ๋ค์ด์ค๋ ๋นํ๊ธฐ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ํํ๋ค, 4๋ฒ ์ ์กฐ๊ฑด์ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ ๋ฐ๋ณต๋ฌธ์ ์ค๋จํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
๐พ ๋๋์
- ๋ด๊ฐ ์ข์ํ๋ Union-Find ๋ฌธ์ ์ด๋ค.
- ์ฒ์ ํ์ด๋ณด๋ ์ ํ์ด๋ผ ์กฐ๊ธ ํท๊ฐ๋ฆฌ๊ธด ํ์ง๋ง, ๊ฒ์ดํธ์ ๋นํ๊ธฐ์ ๊ด๊ณ๋ฅผ ์กฐ๊ธ ํ์
ํ๋
์์ค์ฝ๋๋ผ๋ ์ง๋ฉด์ ์๋ํด๋ณผ ์ ์์๋ค. - ์ ํ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ find_parent, union_parent ์ ๋ก์ง์ ์ธ์๋๋ ํจ~์ฌ ์์ํ๋ค.
๋ฐ์ํ'PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] ์์ ๊ฒ์ with Python (0) 2021.10.14 [Programmers] ๋ฉ๋ด ๋ฆฌ๋ด์ผ with Python (0) 2021.10.13 [๋ฐฑ์ค] 2143 ๋ ๋ฐฐ์ด์ ํฉ with Python (0) 2021.10.12 [๋ฐฑ์ค] 1967 ํธ๋ฆฌ์ ์ง๋ฆ with Python (0) 2021.10.11 [๋ฐฑ์ค] 1799 ๋น์ with Python (0) 2021.10.11 - ๊ณตํญ์๋