-
[๋ฐฑ์ค] 6118 ์จ๋ฐ๊ผญ์ง with PythonPS 2021. 12. 1. 22:23728x90๋ฐ์ํ
๐ BOJ 6118 ์จ๋ฐ๊ผญ์ง
๐ก ์กฐ๊ฑด
ํ๊ฐ์ ๊ฐ์
(2 <= N <= 20,000)
, 1๋ถํฐ ์ธ์๋ฆฐ๋ค.๋ชจ๋ ํ๊ฐ์
(1<= M <= 50,000)
๊ฐ์ ์๋ฐฉํฅ ๊ธธ๋ก ์ด์ด์ ธ ์๋ค.๋์๋ 1๋ฒ ํ๊ฐ์์์ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ์ด์ง์๋ก ๊ฐ์ํ๋ค.
๊ฑฐ๋ฆฌ = ์ง๋์ผ ํ๋ ๊ธธ์ ์ต์ ๊ฐ์.
์จ์ด์ผ ํ๋ ๊ฐ์ฅ ๊ฑฐ๋ฆฌ๊ฐ ๋จผ ํ๊ฐ ๋ฒํธ
,๊ฐ์ฅ ๊ฑฐ๋ฆฌ๊ฐ ๋จผ ํ๊ฐ๊น์ง์ ๊ฑฐ๋ฆฌ
,๊ฐ์ฅ ๊ฑฐ๋ฆฌ๊ฐ ๋จผ ํ๊ฐ๊ณผ ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ์ง๋ ํ๊ฐ์ ์
๋ฅผ ์ฐจ๋ก๋๋ก ์ถ๋ ฅํ๋ฉฐ, ๊ฐ์ฅ ๊ฑฐ๋ฆฌ๊ฐ ๋จผ ํ๊ฐ ๋ฒํธ๊ฐ ์ฌ๋ฌ๊ฐ๋ผ๋ฉด ๊ฐ์ฅ ์์ ์๋ฅผ ์ถ๋ ฅํ๋ค.๋๋น ์ฐ์ ํ์(BFS)์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from sys import stdin from collections import deque n, m = map(int, stdin.readline().split()) arr = [[] for _ in range(n + 1)] for _ in range(m): a, b = map(int, stdin.readline().split()) arr[a].append(b) arr[b].append(a) res = [[] for _ in range(20001)] max_dist = -1e9 def bfs(n): global max_dist q = deque() q.append((0, n)) visited = set() visited.add(n) while q: dist, now = q.popleft() max_dist = max(max_dist, dist) for node in arr[now]: if node not in visited: visited.add(node) q.append((dist + 1, node)) res[dist + 1].append(node) bfs(1) print(min(res[max_dist]), max_dist, len(res[max_dist]))
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
6 7 3 6 4 3 3 2 1 3 1 2 2 4 5 2
์คํ๊ฒฐ๊ณผ
4 2 3
โจ๏ธ ๋ฌธ์ ํ์ด
์๋ฐฉํฅ์ผ๋ก ์์ง์ผ ์ ์๋ ๋ ธ๋๋ค์ ์ฐ๊ฒฐํ๊ธฐ ์ํด 2์ฐจ์ ๋ฆฌ์คํธ์ธ
arr
์ ์์ฑํ ํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๋ค.๊ฒฐ๊ณผ ๊ฐ์ ์ ์ฅํ๊ณ , ํ๊ฐ์ ๋ฒํธ๋ฅผ ์๋ฏธํ๋
res
2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๋ค.
๊ฐ์ฅ ๋จผ ํ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํmax_dist
๋ณ์๋ ์์ฑํ๋ค.๋๋น ์ฐ์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ํธ์ถํ๋๋ฐ, ํ์๋
(๊ฑฐ๋ฆฌ, ๋ ธ๋๋ฒํธ)
๋ฅผ ๋ฃ์ด์ค๋ค.
ํ๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณตํ๋ฉด์, ํด๋น ํ๊ฐ๊ณผ ์ฐ๊ฒฐ๋์ด ์๋ ํ๊ฐ์ ์์ฐจ์ ์ผ๋ก ๋ฐฉ๋ฌธํ๋ค.
ํ์์ ๋ฐ์ดํฐ๋ฅผpop()
ํ์ฌ ๋์จ ๊ฑฐ๋ฆฌ ๋ฐ์ดํฐ๊ฐ ํ์ฌmax_dist
๋ณด๋ค ํฌ๋ค๋ฉด ๊ฐฑ์ ํ๋ค.๋ฐฉ๋ฌธํ ํ๊ฐ์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ๋ ํ๊ฐ์ด๋ผ๋ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด
visited
์งํฉ ์๋ฃํ์ ๋ ธ๋๋ฒํธ๋ฅผ ์ ์ฅํ๋ค.ํ๊ฐ์ ๊ฑฐ๋ฆฌ๋ ๋ชจ๋ 1์ฉ์ด๊ธฐ์, ํ์
(ํ์ฌ ํ๊ฐ๊ณผ์ ๊ฑฐ๋ฆฌ + 1, ๋ ธ๋๋ฒํธ)
๋ฅผ ์ ์ฅํ๋ค.res
๋ฆฌ์คํธ์ ๊ฑฐ๋ฆฌ + 1์ ํด๋นํ๋ ๋ฆฌ์คํธ์ ๋ ธ๋ ๋ฒํธ๋ฅผ ์ ์ฅํ๋ค.res
๋ฆฌ์คํธ์๋ ๊ฐ์ฅ ๋จผ ๊ฑฐ๋ฆฌ์ ํด๋นํ๋ ์์ ๋ฆฌ์คํธ์ ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ์ง ํ๊ฐ์ ๋ฒํธ๋ค์ด ์ ์ฅ๋๋ค.๋ฌธ์ ์์ ์๊ตฌํ ๊ฒ๋ค์ ์ถ๋ ฅํ๋ค.
์จ์ด์ผ ํ๋ ํ๊ฐ์ ๋ฒํธ =min(res[max_dist])
์จ์ด์ผ ํ๋ ํ๊ฐ๊น์ง์ ๊ฑฐ๋ฆฌ =max_dist
์จ์ด์ผ ํ๋ ํ๊ฐ๊น์ง์ ๊ฑฐ๋ฆฌ์ ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ์ง ํ๊ฐ๋ค =len(res[max_dist])
๐พ ๋๋์
- BFS ์์ฉ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ํ์ด๋ฅผ ํ๋๋ฐ์๋ ์ค๋ ๊ฑธ๋ฆฌ์ง ์์๋ค.
- ๊ทธ๋ํ ์ด๋ก ๋ฐ BFS ๋ฌธ์ ๋ ์กฐ๊ธ์ฉ ๋ ํ์ด์ ๋ด๊ฒ์ผ๋ก ๋ง๋ค์ด๋ ๋ ์ข์ ๊ฒ ๊ฐ๋ค.
๋ฐ์ํ'PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] ์ธ๋ฒฝ ์ ๊ฒ with Python (0) 2021.12.06 [๋ฐฑ์ค] 11497 ํต๋๋ฌด ๊ฑด๋๋ฐ๊ธฐ with Python (0) 2021.12.06 [๋ฐฑ์ค] 2841 ์ธ๊ณ์ธ์ ๊ธฐํ ์ฐ์ฃผ with Python (0) 2021.12.01 [๋ฐฑ์ค] 2304 ์ฐฝ๊ณ ๋ค๊ฐํ with Python (0) 2021.11.29 [Programmers] ์๋ฌผ์ ์ ์ด์ with Python (0) 2021.11.29