1. ๋ฌธ์ ์ค๋ช
- ์
๋ ฅ
- ์ฒซ์งธ ์ค์ ๋์์ ๊ฐ์ N, ๋๋ก์ ๊ฐ์ M, ๊ฑฐ๋ฆฌ ์ ๋ณด K, ์ถ๋ฐ ๋์์ ๋ฒํธ X
- ๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ๊ฑธ์ณ์ ๋ ๊ฐ์ ์์ฐ์ A, B๊ฐ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง, ์ด๋ A๋ฒ ๋์์์ B๋ฒ ๋์๋ก ์ด๋ํ๋ ๋จ๋ฐฉํฅ ๋๋ก๊ฐ ์กด์ฌํ๋ค๋ ์๋ฏธ
- ์ถ๋ ฅ : [3,4,2,1,5] ์คํจ์จ์ด ๋์ ์คํ ์ด์ง์์ผ๋ก ์ถ๋ ฅ, ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ K์ธ ๋์๊ฐ ํ๋๋ ์กด์ฌํ์ง ์์ผ๋ฉด -1
2. ์ฝ๋
solution1.py
# -*- coding: utf-8 -*-
#๋
ธ๋, ๊ฐ์ graph ๋ง๋ค๊ธฐ
from collections import deque
import sys
input = sys.stdin.readline
N,M,K,X = map(int, input().split())
graph = [[] for _ in range(N+1)] #๊ฐ ๋
ธ๋(0~N)๊ฐ ๋ณ๋ก ๋ฆฌ์คํธ๊ฐ ์กด์ฌํ๋๋ก ์ด๊ธฐํ
distance = [0 for _ in range(N+1)]
visited = [False]*(N+1)
#๋
ธ๋ ์ฐ๊ฒฐ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํ์ฌ graph list์ ์ถ๊ฐ
for _ in range(M):
a, b = map(int, input().split())
graph[a].append(b)
#์ถ๋ฐ๋
ธ๋ X๋ก๋ถํฐ ๊ฐ ๋
ธ๋๊น์ง ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๊ณ ๊ฑฐ๋ฆฌ๊ฐ K์ธ ๋
ธ๋๋ง ์ถ๋ ฅ
def bfs(graph, start, visited, distance):
queue = deque([start])
visited[start] = True #ํ์ฌ ๋
ธ๋ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
distance[start] = 0
while queue:
v = queue.popleft() #ํ์ฌ๋
ธ๋
for i in graph[v]: #ํด๋น ๋
ธ๋์ ์ธ์ ๋
ธ๋๋ค ํ์ธ
if not visited[i]:#์์ง ๋ฐฉ๋ฌธํ์ง์์ ์ธ์ ๋
ธ๋๋ค์
queue.append(i) #์ฐพ๋ ์กฑ์กฑ ๋ค ํ์ ์ฝ์
visited[i] = True #๋ฐฉ๋ฌธ์ฒ๋ฆฌ
distance[i] += distance[v]+ 1#
exist = False
for i, c in enumerate(distance):
if c == K:
print(i)
exist = True
if exist == False:
print(-1)
bfs(graph,X,visited,distance)
3. ํ๊ณ
- ์ฒ์์ ํ ๋ ๋ฐํ์ ์๋ฌ(IndexError)๊ฐ ๋ฌ๋ค.
- visited = [False]*(N+1) ๋ก ํด์ผํ๋๋ฐ, visited = [False]*9 ๋ก ๋์ด ์์๋ค. ใ ใ
- bfs ๋ฅผ ํตํด ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋ i๋ฅผ ์ฐพ์์ ๋, ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ ๋ถ๋ถ์์ ์ด์ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ๋ด๋ distance[v]์ +1 ์ ํด์ ์๋กญ๊ฒ ๋ฐฉ๋ฌธํ๋ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ(distance[i])์ ์ ์ฅํด์ค๋ค.
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] #1260 DFS์ BFS (Python) (0) | 2022.01.19 |
---|---|
[๋ฐฑ์ค] #18405 ๊ฒฝ์์ ์ ์ผ (Python) (0) | 2022.01.18 |
[๋ฐฑ์ค] #15922 ์์ฐ์ผ ์ฐ์์ผ์ด์ผ!! (Python) (0) | 2021.05.18 |
[๋ฐฑ์ค] #2529 ๋ถ๋ฑํธ (Python) (0) | 2021.05.18 |
[๋ฐฑ์ค] #14501 ํด์ฌ (Python) (0) | 2021.05.18 |