๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/11724)
<์ฐ๊ฒฐ ์์์ ๊ฐ์>
๋ฌธ์
๋ฐฉํฅ ์๋ ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ก์ ๋, ์ฐ๊ฒฐ ์์ (Connected Component)์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ N๊ณผ ๊ฐ์ ์ ๊ฐ์ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) ๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ๊ฐ์ ์ ์ ๋์ u์ v๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ u, v ≤ N, u ≠ v) ๊ฐ์ ๊ฐ์ ์ ํ ๋ฒ๋ง ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ฐ๊ฒฐ ์์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
- my solution
import sys
def bfs(graph, start,visited):
queue=[start]
while queue:
x=queue.pop(0)
if x not in visited: # ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
visited.append(x) # ๋ฐฉ๋ฌธ
queue+=graph.get(x)
queue=list(set(queue)) # ์ค๋ณต ์ ๊ฑฐ
if __name__=='__main__':
n,m=map(int, sys.stdin.readline().split())
graph={}
for i in range(n): #init
graph[i+1]=[]
for i in range(m): #๋ฐฉํฅ ์๋ ๊ทธ๋ํ
x,y=map(int, sys.stdin.readline().split())
graph[x].append(y)
graph[y].append(x)
visited=[]
result=0
i=1
while len(visited)!=n: # ์ฐ๊ฒฐ ์์ ๊ฐ์ ๊ตฌํ๊ธฐ
if i not in visited:
bfs(graph, i,visited)
result += 1
i+=1
print(result)
- bfs
- queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต: ์ ค ์ฒ์ ๊ฐ pop ํด์ ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด visited์ ์ถ๊ฐ ๋ฐ queue์ ์ถ๊ฐ (set์ ํ์ฉํ์ฌ ์ค๋ณต ์ ๊ฑฐ) - main
- ์ ๋ ฅ
- ๋ฐฉํฅ ์๋ ๊ทธ๋ํ: ์๋ฐฉํฅ์ผ๋ก ์ถ๊ฐ
- ์ฐ๊ฒฐ ์์ ๊ฐ์ ๊ตฌํ๊ธฐ: visited ๊ธธ์ด๊ฐ ์ ์ ๊ฐ์์ ๊ฐ์ง ์๋ค๋ฉด ๋ฐ๋ณต -> ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด bfs ํธ์ถ ๋ฐ result +1
์๊ฐ๐ค
์ฒ์์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํด์ set(queue)๋ฅผ ์ถ๊ฐํ ํ ๊ณ์ ์์น ๋ฐ๊ฟ์ ์ ์ถํด๋ดค๋๋ฐ ์คํจ...
๋ชจ๋ฅด๊ฒ ๋ค ํด์ ๋ค๋ฅธ ์ฌ๋ ์ฝ๋๋ฅผ ๋ดค๋๋ฐ ์์ฐจ..
set(queue) ํ ๊ฒ์ ๋ณ์์ ๋์ ์ ์ ํ๋ค ,,,
์ด๋ฐ ์ค์๋ฅผ ํ๋ค๋.. ์ด ์ฝ๋๋ฅผ ์ ์ถํ๋ ๋ฐ๋ก ํต๊ณผ ์๋ฃ -!
๋จ์๊ฐ์ ๋ง์ ์ ์ถ...
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 4358_์ํํ (0) | 2022.02.16 |
---|---|
[Baekjoon] 18352_ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (0) | 2022.02.04 |
[Baekjoon] 5567_๊ฒฐํผ์ (0) | 2022.01.25 |
[Baekjoon] 1012_์ ๊ธฐ๋ ๋ฐฐ์ถ (0) | 2022.01.11 |
[Baekjoon] 2667_๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (0) | 2022.01.07 |