๋ฌธ์ ์ค๋ช
๊ฐ์ฒ ๋ถ๋์ ๊ฐ ๋ถ๋์์ด ์ฌ๋ฌ ์ง์ญ์ ๋ฟ๋ฟ์ด ํฉ์ด์ ธ ํน์ ์๋ฌด๋ฅผ ์ํ ์ค์ ๋๋ค. ์ง๋์์ ๊ฐ์ฒ ๋ถ๋๊ฐ ์์นํ ์ง์ญ์ ํฌํจํ ๊ฐ ์ง์ญ์ ์ ์ผํ ๋ฒํธ๋ก ๊ตฌ๋ถ๋๋ฉฐ, ๋ ์ง์ญ ๊ฐ์ ๊ธธ์ ํต๊ณผํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋ชจ๋ 1๋ก ๋์ผํฉ๋๋ค. ์๋ฌด๋ฅผ ์ํํ ๊ฐ ๋ถ๋์์ ์ง๋ ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ์ต๋จ์๊ฐ์ ๋ถ๋๋ก ๋ณต๊ทํ๊ณ ์ ํฉ๋๋ค. ๋ค๋ง ์ ๊ตฐ์ ๋ฐฉํด๋ก ์ธํด, ์๋ฌด์ ์์ ๋์ ๋ค๋ฅด๊ฒ ๋๋์์ค๋ ๊ฒฝ๋ก๊ฐ ์์ด์ ธ ๋ณต๊ท๊ฐ ๋ถ๊ฐ๋ฅํ ๋ถ๋์๋ ์์ ์ ์์ต๋๋ค.
๊ฐ์ฒ ๋ถ๋๊ฐ ์์นํ ์ง์ญ์ ํฌํจํ ์ด์ง์ญ์ ์ n, ๋ ์ง์ญ์ ์๋ณตํ ์ ์๋ ๊ธธ ์ ๋ณด๋ฅผ ๋ด์ 2์ฐจ์ ์ ์ ๋ฐฐ์ด roads, ๊ฐ ๋ถ๋์์ด ์์นํ ์๋ก ๋ค๋ฅธ ์ง์ญ๋ค์ ๋ํ๋ด๋ ์ ์ ๋ฐฐ์ด sources, ๊ฐ์ฒ ๋ถ๋์ ์ง์ญ destination์ด ์ฃผ์ด์ก์ ๋, ์ฃผ์ด์ง sources์ ์์ ์์๋๋ก ๊ฐ์ฒ ๋ถ๋๋ก ๋ณต๊ทํ ์ ์๋ ์ต๋จ์๊ฐ์ ๋ด์ ๋ฐฐ์ด์ returnํ๋ solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์. ๋ณต๊ท๊ฐ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ ํด๋น ๋ถ๋์์ ์ต๋จ์๊ฐ์ -1์ ๋๋ค.
์ ํ ์ฌํญ
- 3 ≤ n ≤ 100,000
- ๊ฐ ์ง์ญ์ ์ ์ 1๋ถํฐ n๊น์ง์ ๋ฒํธ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค.
- 2 ≤ roads์ ๊ธธ์ด ≤ 500,000
- roads์ ์์์ ๊ธธ์ด = 2
- roads์ ์์๋ [a, b] ํํ๋ก ๋ ์ง์ญ a, b๊ฐ ์๋ก ์๋ณตํ ์ ์์์ ์๋ฏธํฉ๋๋ค.(1 ≤ a, b ≤ n, a ≠ b)
- ๋์ผํ ์ ๋ณด๊ฐ ์ค๋ณตํด์ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- ๋์ผํ [a, b]๊ฐ ์ค๋ณตํด์ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- [a, b]๊ฐ ์๋ค๋ฉด [b, a]๋ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- 1 ≤ sources์ ๊ธธ์ด ≤ 500
- 1 ≤ sources[i] ≤ n
- 1 ≤ destination ≤ n
์ ์ถ๋ ฅ ์
n | roads | sources | destination | result |
3 | [[1, 2], [2, 3]] | [2, 3] | 1 | [1, 2] |
5 | [[1, 2], [1, 4], [2, 4], [2, 5], [4, 5]] | [1, 3, 5] | 5 | [2, -1, 0] |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
- ์ง์ญ 2๋ ์ง์ญ 1๊ณผ ๊ธธ๋ก ์ฐ๊ฒฐ๋์ด ์๊ธฐ ๋๋ฌธ์, ์ง์ญ 2์์ ์ง์ญ 1์ ์ต๋จ๊ฑฐ๋ฆฌ๋ 1์ ๋๋ค.
- ์ง์ญ 3์์ ์ง์ญ 1๋ก ์ด๋ํ ์ ์๋ ์ต๋จ๊ฒฝ๋ก๋ ์ง์ญ 3 → ์ง์ญ 2 → ์ง์ญ 1 ์์ผ๋ก ์ด๋ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ์ง์ญ 3์์ ์ง์ญ 1์ ์ต๋จ๊ฑฐ๋ฆฌ๋ 2์ ๋๋ค.
- ๋ฐ๋ผ์ [1, 2]๋ฅผ returnํฉ๋๋ค.
์ ์ถ๋ ฅ ์ #2
- ์ง์ญ 1์์ ์ง์ญ 5์ ์ต๋จ๊ฒฝ๋ก๋ ์ง์ญ 1 → ์ง์ญ 2 → ์ง์ญ 5 ๋๋ ์ง์ญ 1 → ์ง์ญ 4 → ์ง์ญ 5 ์์ผ๋ก ์ด๋ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ์ต๋จ๊ฑฐ๋ฆฌ๋ 2์ ๋๋ค.
- ์ง์ญ 3์์ ์ง์ญ 5๋ก ๊ฐ๋ ๊ฒฝ๋ก๊ฐ ์๊ธฐ ๋๋ฌธ์, ์ง์ญ 3์์ ์ง์ญ 5๋ก ๊ฐ๋ ์ต๋จ๊ฑฐ๋ฆฌ๋ -1์ ๋๋ค.
- ์ง์ญ 5์์ ์ง์ญ 5๋ ์ด๋ํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์, ์ต๋จ๊ฑฐ๋ฆฌ๋ 0์ ๋๋ค.
- ๋ฐ๋ผ์ [2, -1, 0]์ returnํฉ๋๋ค.
ํ์ด
import collections
def solution(n, roads, sources, destination):
answer = []
dp = [-1 for _ in range(n+1)]
graph = {}
for r in roads:
s, e = r
try:
graph[s].append(e)
except:
graph[s] = [e]
try:
graph[e].append(s)
except:
graph[e] = [s]
queue = collections.deque()
queue.append(destination)
dp[destination] = 0
while queue:
q = queue.popleft()
gr = graph[q]
for g in gr:
if dp[g] == -1:
dp[g] = dp[q] + 1
queue.append(g)
for s in sources:
answer.append(dp[s])
return list(answer)
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.01ms, 10.3MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.01ms, 10.1MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.01ms, 10.3MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.01ms, 10.2MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.01ms, 10.2MB)
ํ
์คํธ 6 ใ ํต๊ณผ (16.19ms, 16.1MB)
ํ
์คํธ 7 ใ ํต๊ณผ (18.49ms, 17.2MB)
ํ
์คํธ 8 ใ ํต๊ณผ (28.04ms, 22.1MB)
ํ
์คํธ 9 ใ ํต๊ณผ (8.42ms, 13.8MB)
ํ
์คํธ 10 ใ ํต๊ณผ (9.36ms, 14.4MB)
ํ
์คํธ 11 ใ ํต๊ณผ (675.22ms, 115MB)
ํ
์คํธ 12 ใ ํต๊ณผ (696.34ms, 115MB)
ํ
์คํธ 13 ใ ํต๊ณผ (774.33ms, 116MB)
ํ
์คํธ 14 ใ ํต๊ณผ (690.98ms, 116MB)
ํ
์คํธ 15 ใ ํต๊ณผ (698.60ms, 115MB)
ํ
์คํธ 16 ใ ํต๊ณผ (171.59ms, 45.5MB)
ํด์ค ๋ณด๊ณ ํธ๋๊น ์ฌ์ด๋ฐ, ์๋ณด๊ณ ํ์์ผ๋ฉด ์ด๊ฒ๋ ์๊ฐ ๋ญ๋น ํ์ ๊ฐ...