๋ฌธ์
https://www.acmicpc.net/problem/11724
๋ด ๋ฌธ์ ํ์ด
# N์ด 10000๊น์ง ์
๋ ฅ๋ ์ ์์ผ๋ฏ๋ก ์๋์ ๊ฐ์ด ๋ฐ๊ฟ์ฃผ์ด์ผ ํจ
import sys
sys.setrecursionlimit(10000)
input = sys.stdin.readline
n, m = map(int, input().split())
connected = [[] for _ in range(n)]
visited = [0] * n
count = 0
for i in range(m):
a, b = map(int, input().split())
connected[a-1].append(b-1)
connected[b-1].append(a-1)
def dfs(x):
if visited[x] > 0: return
visited[x] = count
for i in connected[x]: dfs(i)
for i in range(n):
if visited[i] == 0 and len(connected[i]) > 0:
count += 1
dfs(i)
# ์๋ฌด ๊ฒ๋ ์ด์ด์ง์ง ์์ ํผ์ ๋จ์ ์ ๋ํ ํ๋์ ์ฐ๊ฒฐ ์์๊ฐ ๋จ
for i in visited:
if i == 0: count += 1
print(count)
๐ dfs ๋ฌธ์ ๋ก, ๋ชจ๋ ์ ์ ๋์๊ฐ๋ฉฐ ๋ช ๊ฐ์ ๊ทธ๋ฃน์ผ๋ก ๋๋ ์ ์๋์ง ํ๋จํด ์ฃผ์ด์ผ ํจ
์๋ฌด๊ฒ๋ ์ฐ๊ฒฐ๋์ง ์์ ์ ๋ ํ๋์ ์ฐ๊ฒฐ ์์๋ก ์ธ์ด์ฃผ์ด์ผ ํ๋ ๊ฒ์ด ํฌ์ธํธ !
[ ๋ฐ๋ก ์ถ๊ฐ ]
6 3
1 3
2 3
3 4
[ ๋ณ์ ์ค๋ช ]
- connected๋ ๊ฐ ์ ๋ค์ด ์ด๋ค ์ ๋ค๊ณผ ์ฐ๊ฒฐ๋์ด์๋์ง ์ ์ฅํด ์ค ๋ฆฌ์คํธ์ด๋ค.
๋ฐ๋ผ์ connected์ ์ธ๋ฑ์ค๋ค์ ๋ฆฌ์คํธ์ ๊ฐ ์ธ๋ฑ์ค๋ ์ ์ ์๋ฏธํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
์์ ๋ฐ๋ก๋ฅผ ์๋ก ๋ค๋ฉด, [[2], [2], [0, 1, 3], [2], [], []] ์ด๋ ๊ฒ ์ ์ฅ๋๋ค.
(๋ฆฌ์คํธ๋ก ์ ๋ค์ ๊ณ์ฐํ ์์ ์ด๋ฏ๋ก ํธํ๊ฒ '์ - 1'๊ฐ์ผ๋ก ์๊ฐํ๋ค.) - visited๋ ๊ฐ ์ ๋ค์ ์ฒดํฌํ๋์ง ๊ฒ์ฌํ๊ณ , ์ ๋ง๋ค ์ด๋ค ๊ทธ๋ฃน์ ์ํ๋์ง ํ์ํ๋ ๋ฆฌ์คํธ์ด๋ค.
dfs ํจ์๋ก ํด๋น ์ธ๋ฑ์ค์ ํด๋นํ๋ ์ ์ ์ฒดํฌํ๋ค๋ฉด count ๋ณ์ ๊ฐ์ ์ ์ฅํด์ฃผ์๋ค. - count ๋ณ์๋ ํ๋๋ก ์ฐ๊ฒฐ๋ ์ ๋ค์ dfs ํ์์ด ๋๋ ๋๋ง๋ค +1 ํด์ฃผ๋ฏ๋ก,
๋ช ๊ฐ์ ๋ชจ์์ผ๋ก ์ด๋ฃจ์ด์ ธ์๋์ง ๊ตฌ๋ถํ ์ ์๊ฒ ํ๋ค.
[ ๋ฉ์ธ ์คํ ]
- ์ฒซ ๋ฒ์งธ for๋ฌธ์์๋ connected ๋ฆฌ์คํธ์ ์ฐ๊ฒฐ๋ ์ ๋ค์ ํ์ํด์ฃผ์๋ค.
- ๋ ๋ฒ์งธ for๋ฌธ์์๋ 0๋ถํฐ n-1๊น์ง ๋ฐ๋ณตํ๋ฉด์ ์๋ง์ ์กฐ๊ฑด์ dfs ํจ์๋ฅผ ํธ์ถํ๋ค.
(ํด๋น ์ ์ ํ ๋ฒ๋ ์ฒดํฌํ ์ ์๊ณ , ํด๋น ์ ์ด ์ฐ๊ฒฐ๋ ์ ์ด ํ๋๋ผ๋ ์์ ์กฐ๊ฑด)
๊ทธ๋ฆฌ๊ณ dfs ํจ์๋ฅผ ์คํํ๊ธฐ ์ ์๋ count๋ฅผ ์ฆ๊ฐ์์ผ์ ์ฐ๊ฒฐ ์์๋ค์ ๊ตฌ๋ถํด์ฃผ์๋ค. - dfs ํจ์์์๋ ํธ์ถ๋๋ ์ ๋ง๋ค ๊ทธ์ ์ฐ๊ฒฐ๋ ์ ์ ๋ชจ๋ ํ์ํ ์ ์๊ฒ ํ๋ค.
๊ทธ๋ฆฌ๊ณ visited๊ฐ 0๋ณด๋ค ํด ๊ฒฝ์ฐ return ํด์ฃผ์ด์ ์ค๋ณต ํ์์ ํผํ๊ณ ,
ํ์ํ๊ฒ ๋ ๊ฒฝ์ฐ ํด๋น ์ ์ ์์น์ ํด๋นํ๋ visited[x]์ count๋ฅผ ๋ฃ์ด์คฌ๋ค. - ์ธ ๋ฒ์งธ for๋ฌธ์ ์๋ฌด ์ ๊ณผ๋ ์ด์ด์ง์ง ์์ ํผ์ ๋จ์ ์ ๋ค์ ์ธ๊ธฐ ์ํจ์ด๋ค.
visited ๋ฆฌ์คํธ๋ฅผ ํ์ํ์ฌ 0์ ๊ฐ์๋ฅผ ์ธ์ด์ฃผ์๋ค.
๐ก ํผ๋๋ฐฑ
- ์ฒ์์ input์ ๋ฆฌ๋ฏธํธ๋ฅผ ๋ฐ๋ก ์ง์ ํด์ฃผ์ด์ผ ํ๋์ง๋ฅผ ๋ชฐ๋ผ์ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฌ๋๋ฐ,
๊ตฌ๊ธ๋งํด์ ์์ธ์ ์ฐพ์ ์ ์์๋ค. ์ด๋ถ๋ถ ๊ณต๋ถํด๋์ผ ํ ๋ฏ - ๋ฌธ์ ์์ ์ฃผ์ด์ง ์ผ์ด์ค๋ค๋ก๋ ํผ์ ๋จ์ ์ฐ๊ฒฐ ์์๋ฅผ ์๊ฐํ๊ธฐ ์ด๋ ค์์
๊ณ์ ๋ฐ๋ก๋ฅผ ๋ชป์ฐพ์๋๋ฐ, ๋ฐฑ์ค ์ง๋ฌธ๊ฒ์์์ ์๋ง์ ๋ฐ๋ก๋ฅผ ์ฐพ์๊ณ ,, ๊ทธ๋์ ์ค๋๊ฑธ๋ ธ๋ค.
'4๏ธโฃ Python > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python Algorithm] ํ ๋งํ BOJ #7576 (0) | 2022.01.30 |
---|---|
[Python Algorithm] ์ฐ๊ตฌ์ BOJ #14502 (0) | 2022.01.30 |
[Python Algorithm] ๋ฐ์ด๋ฌ์ค BOJ #2606 (0) | 2022.01.28 |
[Python Algorithm] ์ ๊ธฐ๋ ๋ฐฐ์ถ BOJ #1012 (0) | 2022.01.27 |
[Python Algorithm] ์ ์ ์ผ๊ฐํ BOJ #1932 (0) | 2021.12.17 |
๋๊ธ