๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/2644)
<์ด์ ๊ณ์ฐ>
๋ฌธ์
์ฐ๋ฆฌ๋๋ผ๋ ๊ฐ์กฑ ํน์ ์น์ฒ๋ค ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์ด์๋ผ๋ ๋จ์๋ก ํํํ๋ ๋ ํนํ ๋ฌธํ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ด๋ฌํ ์ด์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ณ์ฐ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ชจ์ ์์ ์ฌ์ด๋ฅผ 1์ด์ผ๋ก ์ ์ํ๊ณ ์ด๋ก๋ถํฐ ์ฌ๋๋ค ๊ฐ์ ์ด์๋ฅผ ๊ณ์ฐํ๋ค. ์๋ฅผ ๋ค๋ฉด ๋์ ์๋ฒ์ง, ์๋ฒ์ง์ ํ ์๋ฒ์ง๋ ๊ฐ๊ฐ 1์ด์ผ๋ก ๋์ ํ ์๋ฒ์ง๋ 2์ด์ด ๋๊ณ , ์๋ฒ์ง ํ์ ๋ค๊ณผ ํ ์๋ฒ์ง๋ 1์ด, ๋์ ์๋ฒ์ง ํ์ ๋ค๊ณผ๋ 3์ด์ด ๋๋ค.
์ฌ๋ฌ ์ฌ๋๋ค์ ๋ํ ๋ถ๋ชจ ์์๋ค ๊ฐ์ ๊ด๊ณ๊ฐ ์ฃผ์ด์ก์ ๋, ์ฃผ์ด์ง ๋ ์ฌ๋์ ์ด์๋ฅผ ๊ณ์ฐํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฌ๋๋ค์ 1, 2, 3, …, n (1 ≤ n ≤ 100)์ ์ฐ์๋ ๋ฒํธ๋ก ๊ฐ๊ฐ ํ์๋๋ค. ์ ๋ ฅ ํ์ผ์ ์ฒซ์งธ ์ค์๋ ์ ์ฒด ์ฌ๋์ ์ n์ด ์ฃผ์ด์ง๊ณ , ๋์งธ ์ค์๋ ์ด์๋ฅผ ๊ณ์ฐํด์ผ ํ๋ ์๋ก ๋ค๋ฅธ ๋ ์ฌ๋์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์งธ ์ค์๋ ๋ถ๋ชจ ์์๋ค ๊ฐ์ ๊ด๊ณ์ ๊ฐ์ m์ด ์ฃผ์ด์ง๋ค. ๋ท์งธ ์ค๋ถํฐ๋ ๋ถ๋ชจ ์์ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๋ ๋ฒํธ x, y๊ฐ ๊ฐ ์ค์ ๋์จ๋ค. ์ด๋ ์์ ๋์ค๋ ๋ฒํธ x๋ ๋ค์ ๋์ค๋ ์ ์ y์ ๋ถ๋ชจ ๋ฒํธ๋ฅผ ๋ํ๋ธ๋ค.
๊ฐ ์ฌ๋์ ๋ถ๋ชจ๋ ์ต๋ ํ ๋ช ๋ง ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ ๋ ฅ์์ ์๊ตฌํ ๋ ์ฌ๋์ ์ด์๋ฅผ ๋ํ๋ด๋ ์ ์๋ฅผ ์ถ๋ ฅํ๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ ๋ ์ฌ๋์ ์น์ฒ ๊ด๊ณ๊ฐ ์ ํ ์์ด ์ด์๋ฅผ ๊ณ์ฐํ ์ ์์ ๋๊ฐ ์๋ค. ์ด๋์๋ -1์ ์ถ๋ ฅํด์ผ ํ๋ค.
๋ฌธ์ ํ์ด
- my solution
import sys
def bfs(graph, start, depth):
visited=[False]*n # ๋ฐฉ๋ฌธ ์ฌ๋ถ
visited[start-1]=True
queue=[start]
while queue:
temp=queue.pop(0)
for i in graph[temp]:
if visited[i-1]==False: # ๋ฐฉ๋ฌธ ์์ง ์ํ์ผ๋ฉด
visited[i-1]=True
depth[i-1]=depth[temp-1]+1
queue.append(i)
if __name__=='__main__':
n=int(input()) # ์ ์ฒด ์ฌ๋์ ์
a,b=map(int, sys.stdin.readline().split()) # ๊ณ์ฐํด์ผํ๋ ๋ฒํธ
m=int(input()) # ๋ถ๋ชจ ์์ ์
graph={}
depth=[0]*n
for i in range(n):
graph[i+1]=[]
for i in range(m):
x,y=map(int, sys.stdin.readline().split())
graph[x].append(y)
graph[y].append(x)
bfs(graph, a, depth)
if depth[b-1]==0: # ์ด์ ๊ณ์ฐ ๋ถ๊ฐ
print(-1)
else:
print(depth[b-1])
bfs๋ฅผ ํ์ฉํ์ฌ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์๋ค.
- bfs
: visited = ๋ฐฉ๋ฌธ ์ฌ๋ถ ํ์ธํ๋ list
: queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต = ์ ์ผ ์ฒ์ ๊ฐ์ pop ํด์ ๊ทธ์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด ๋ฐฉ๋ฌธ ํ depth ์ ์ฅ ๋ฐ queue์ ์ ์ฅ - main
: ์ ์ฒด ์ฌ๋์ ์ ์ ๋ ฅ
: ๊ณ์ฐํด์ผ ํ๋ ๋ฒํธ ์ ๋ ฅ
: ๋ถ๋ชจ ์์ ์ ์ ๋ ฅ ๋ฐ graph ์ ์ฅ
: bfs ํธ์ถ
: ์ด์ ๊ณ์ฐ ๋ถ๊ฐํ ๊ฒฝ์ฐ -1 ์ถ๋ ฅ or ์ด์ ์ถ๋ ฅ
โ ์ graph๋ฅผ ์๋ฐฉํฅ์ผ๋ก ๋ง๋ค์๋๊ฐ?
์ฒ์์๋ ๋จ๋ฐฉํฅ์ผ๋ก graph๋ฅผ ๋ง๋๋ ค๊ณ ํ๋ค. ํ์ง๋ง ๋จ๋ฐฉํฅ์ผ๋ก ํ ๊ฒฝ์ฐ root๋ฅผ ๊ตฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์กฐ๊ธ ๋ณต์กํด์ง ๊ฒ ๊ฐ์๋ค.
๊ทธ๋์ ๊ณ์ฐํด์ผ ํ๋ ๋ฒํธ๋ฅผ ์์ ๋ ธ๋๋ก ํ์ฌ bfs๋ฅผ ํ๊ธฐ ์ํด ์๋ฐฉํฅ์ผ๋ก graph๋ฅผ ๋ง๋ค์๋ค. ์ด ๊ฒฝ์ฐ ๊ณ์ฐํด์ผ ํ๋ ๋ฒํธ๋ฅผ ์์์ผ๋ก ์ด์(depth)๋ฅผ ๋ฐ๋ก ๊ตฌํ ์ ์๋ค.
์๊ฐ๐ค
์ด์ bfs, dfs ๋ง๊ณ ๋ค๋ฅธ ๋ฌธ์ ๋ก ๋์ด๊ฐ๋ณผ๊น?๋ผ๊ณ ์๊ฐ ์ค
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 2553_๋ง์ง๋ง ํฉํ ๋ฆฌ์ผ ์ (0) | 2022.03.16 |
---|---|
[Baekjoon] 9465_์คํฐ์ปค (0) | 2022.03.15 |
[Baekjoon] 11725_ํธ๋ฆฌ์ ๋ถ๋ชจ ์ฐพ๊ธฐ (0) | 2022.03.11 |
[Baekjoon] 2502_๋ก ๋จน๋ ํธ๋์ด (0) | 2022.03.10 |
[Baekjoon] 11048_์ด๋ํ๊ธฐ (0) | 2022.03.09 |