- Dynamic Programming
- ๋ฌธ์์ด
- ์ํ
- CodingTest
- ๊ทธ๋ํ ์ด๋ก
- BFS
- Java
- ์๋ฃ๊ตฌ์กฐ
- Brute Force Algorithm
- Study
- greedy
- ์ ๋ ฌ
- ๊ตฌํ
- ์ ์๋ก
- stack
- Python
- LV2
- ์๋ฎฌ๋ ์ด์
- ๊ทธ๋ํ ํ์
- PGM
- DP
- SpringBoot
- queue
- ๊ต์ฌ
- sort
- dfs
- ๊น์ด ์ฐ์ ํ์
- ๋ฐฑํธ๋ํน
- ๋๋น ์ฐ์ ํ์
- BOJ
๊ธฐ๋ก๋ฐฉ
BOJ_2606 : ๋ฐ์ด๋ฌ์ค ๋ณธ๋ฌธ
๐น ๋ฌธ์ ๐น
์ ์ข ๋ฐ์ด๋ฌ์ค์ธ ์ ๋ฐ์ด๋ฌ์ค๋ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ํ๋๋ค. ํ ์ปดํจํฐ๊ฐ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๋ฉด ๊ทธ ์ปดํจํฐ์ ๋คํธ์ํฌ ์์์ ์ฐ๊ฒฐ๋์ด ์๋ ๋ชจ๋ ์ปดํจํฐ๋ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
์๋ฅผ ๋ค์ด 7๋์ ์ปดํจํฐ๊ฐ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ๋คํธ์ํฌ ์์์ ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ํ์. 1๋ฒ ์ปดํจํฐ๊ฐ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๋ฉด ์ ๋ฐ์ด๋ฌ์ค๋ 2๋ฒ๊ณผ 5๋ฒ ์ปดํจํฐ๋ฅผ ๊ฑฐ์ณ 3๋ฒ๊ณผ 6๋ฒ ์ปดํจํฐ๊น์ง ์ ํ๋์ด 2, 3, 5, 6 ๋ค ๋์ ์ปดํจํฐ๋ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค. ํ์ง๋ง 4๋ฒ๊ณผ 7๋ฒ ์ปดํจํฐ๋ 1๋ฒ ์ปดํจํฐ์ ๋คํธ์ํฌ์์์ ์ฐ๊ฒฐ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
์ด๋ ๋ 1๋ฒ ์ปดํจํฐ๊ฐ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ ธ๋ค. ์ปดํจํฐ์ ์์ ๋คํธ์ํฌ ์์์ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ ์ ๋ณด๊ฐ ์ฃผ์ด์ง ๋, 1๋ฒ ์ปดํจํฐ๋ฅผ ํตํด ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ ์ปดํจํฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐น ์ ๋ ฅ ๐น
์ฒซ์งธ ์ค์๋ ์ปดํจํฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ปดํจํฐ์ ์๋ 100 ์ดํ์ด๊ณ ๊ฐ ์ปดํจํฐ์๋ 1๋ฒ ๋ถํฐ ์ฐจ๋ก๋๋ก ๋ฒํธ๊ฐ ๋งค๊ฒจ์ง๋ค. ๋์งธ ์ค์๋ ๋คํธ์ํฌ ์์์ ์ง์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ ์์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ด์ด์ ๊ทธ ์๋งํผ ํ ์ค์ ํ ์์ฉ ๋คํธ์ํฌ ์์์ ์ง์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ์ ๋ฒํธ ์์ด ์ฃผ์ด์ง๋ค.
๐น ์ถ๋ ฅ ๐น
1๋ฒ ์ปดํจํฐ๊ฐ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ ธ์ ๋, 1๋ฒ ์ปดํจํฐ๋ฅผ ํตํด ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ ์ปดํจํฐ์ ์๋ฅผ ์ฒซ์งธ ์ค์ ์ถ๋ ฅํ๋ค.
๐น ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ ๐น
- ๊ทธ๋ํ ์ด๋ก
- ๊ทธ๋ํ ํ์
- ๋๋น ์ฐ์ ํ์
- ๊น์ด ์ฐ์ ํ์
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
DFS, BFS ๋ฐฉ์์ผ๋ก ํ๋ฆฌ๋ ๋ฌธ์ ์ด๋ค. ํ์๋ BFS๋ฅผ ์ฌ์ฉํ๋ค.
๐ธ ์ฝ๋ ๐ธ
com = int(input())
num = int(input())
connect = [[i] for i in range(com)]
visit = [False] * com
for i in range(num):
a, b = map(int, input().split())
connect[a-1].append(b-1)
connect[b-1].append(a-1)
count = 0
stack = [0]
while stack:
i = stack.pop()
if not visit[i]:
visit[i] = True
count += 1
for j in connect[i]:
if not visit[j]:
stack.append(j)
print(count - 1)
๐ธ ์ฝ๋ ํด์ ๐ธ
com = int(input())
num = int(input())
connect = [[i] for i in range(com)]
visit = [False] * com
for i in range(num):
a, b = map(int, input().split())
connect[a-1].append(b-1)
connect[b-1].append(a-1)
- connect์ ์ฐ๊ฒฐ ์ ๋ณด ์ ์ฅ
- ๋ฐ๋ ๋ฐฉํฅ๋ ์ ์ฅ
count = 0
stack = [0]
while stack:
i = stack.pop()
if not visit[i]:
visit[i] = True
count += 1
for j in connect[i]:
if not visit[j]:
stack.append(j)
print(count - 1)
- count : ๋ฐ์ด๋ฌ์ค์ ๊ฐ์ผ๋ PC์ ์
- stack : BFS๋ฅผ ์ํ ์คํ์ฉ ๋ฆฌ์คํธ
- ๋ฐฉ๋ฌธํ์ง ์์๋ PC์ ๋ฐฉ๋ฌธํ๋ฉด, ์ฐ๊ฒฐ๋ ๋ค๋ฅธ PC๋ค ์ค ๋ฐฉ๋ฌธํ์ง ์์ PC๋ง ๋ฐฉ๋ฌธ ์ค๋น(์คํ ์ฝ์ )
- ์์ PC๋ฅผ ์ ์ธํ๊ธฐ ์ํด์ -1 ํ ์ถ๋ ฅ
๐ธ end ๐ธ
์ฒ์์ DFS๋ก ํ์ดํ๊ณ ์ ํ์ง๋ง ์คํจํด์ BFS๋ก ํ์ดํ๋ค.๋ค๋ฅธ ํ์ด๋ฅผ ๋ณด๋ DFS๋ณด๋ค BFS๊ฐ ์ฒ๋ฆฌ ์๋๋ ๋ ๋น ๋ฅธ ๊ฒ ๊ฐ๋ค.