๐ค๋ฌธ์ ํด๊ฒฐ
1. S1 | ๊ทธ๋ํ ์ด๋ก , ๊ทธ๋ํ ํ์, ๋๋น ์ฐ์ ํ์, ํ๋ก์ด๋-์์ฌ(?)
2. ์ธ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ ๋ค!
3. ๋ฒ ์ด์ปจ์์ ๊ทธ ๋์ ์ฌ๋์ ์ ์ฅํ ๋ณ์ ์์ฑ
4. ํ์ฌ๋์ฉ ๋ชจ๋ BFS ํ์
5. visited์ ์ ์ฅ๋ ์ซ๋ฅผ ๋ชจ๋ ํฉ์น๋ฉด ๋ฒ ์ด์ปจ ์๊ฐ ๋์จ๋ค.
6. ๋น๊ต๋ฅผ ํตํด ๊ฐ์ฅ ์์ ๋ฒ ์ด์ปจ์๋ฅผ ๊ฐ์ง ์ฌ๋์ ๋ต์ผ๋ก ์ถ๋ ฅํ๋ค.
๐จ ์ ๋ชฉ๋ง ๋ณด๊ณ ์ด๋ ค์ด ๋ฌธ์ ์ธ์ค ์์๋๋ฐ BFS๋ฅผ ๋ชจ๋ ๋์์ฃผ๋ฉด ํด๊ฒฐ๋๋ค.
๐ป์์ค ์ฝ๋
import sys
from _collections import deque
N, M = map(int, input().split())
# ์ธ์ ๋ฆฌ์คํธ ์์ฑ
adj = {x + 1: [] for x in range(N)}
for i in range(M):
s, e = map(int, sys.stdin.readline().split())
adj[s].append(e)
adj[e].append(s)
# ๋ฒ ์ด์ปจ์๊ฐ ๊ฐ์ฅ ์์ ๋์ ๊ทธ ์ฌ๋
b_num = float('inf')
b_people = 0
# BFS ํ์
for i in range(1, N + 1):
visited = [-1] * (N + 1) # ๋ฐฉ๋ฌธํ์ธ๊ณผ ๋ฒ ์ด์ปจ์
q = deque([i])
visited[i] = 0
while q:
c = q.popleft()
for neighbor in adj[c]:
if visited[neighbor] == -1:
visited[neighbor] = visited[c] + 1
q.append(neighbor)
# ๋ฒ ์ด์ปจ์๊ฐ ์ต์์ธ ์ฌ๋ ๊ตฌํ๊ธฐ
if sum(visited) + 1 < b_num:
b_num = sum(visited) + 1
b_people = i
print(b_people)
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: SW Expert Academy
๋งํฌ: https://www.acmicpc.net/problem/1389
๋ฌธ์
์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น์ ์ํ๋ฉด ์ง๊ตฌ์ ์๋ ๋ชจ๋ ์ฌ๋๋ค์ ์ต๋ 6๋จ๊ณ ์ด๋ด์์ ์๋ก ์๋ ์ฌ๋์ผ๋ก ์ฐ๊ฒฐ๋ ์ ์๋ค. ์ผ๋น ๋ฒ ์ด์ปจ ๊ฒ์์ ์์์ ๋ ์ฌ๋์ด ์ต์ ๋ช ๋จ๊ณ ๋ง์ ์ด์ด์ง ์ ์๋์ง ๊ณ์ฐํ๋ ๊ฒ์์ด๋ค.
์๋ฅผ ๋ค๋ฉด, ์ ํ ์๊ด์์ ๊ฒ ๊ฐ์ ์ธํ๋ํ๊ต์ ์ด๊ฐํธ์ ์๊ฐ๋ํ๊ต์ ๋ฏผ์ธํฌ๋ ๋ช ๋จ๊ณ๋ง์ ์ด์ด์ง ์ ์์๊น?
์ฒ๋ฏผํธ๋ ์ด๊ฐํธ์ ๊ฐ์ ํ๊ต์ ๋ค๋๋ ์ฌ์ด์ด๋ค. ์ฒ๋ฏผํธ์ ์ต๋ฐฑ์ค์ Baekjoon Online Judge๋ฅผ ํตํด ์๊ฒ ๋์๋ค. ์ต๋ฐฑ์ค๊ณผ ๊น์ ์์ ๊ฐ์ด Startlink๋ฅผ ์ฐฝ์ ํ๋ค. ๊น์ ์๊ณผ ๊น๋ํ์ ๊ฐ์ ํ๊ต ๋์๋ฆฌ ์์์ด๋ค. ๊น๋ํ๊ณผ ๋ฏผ์ธํฌ๋ ๊ฐ์ ํ๊ต์ ๋ค๋๋ ์ฌ์ด๋ก ์๋ก ์๊ณ ์๋ค. ์ฆ, ์ด๊ฐํธ-์ฒ๋ฏผํธ-์ต๋ฐฑ์ค-๊น์ ์-๊น๋ํ-๋ฏผ์ธํฌ ์ ๊ฐ์ด 5๋จ๊ณ๋ง ๊ฑฐ์น๋ฉด ๋๋ค.
์ผ๋น ๋ฒ ์ด์ปจ์ ๋ฏธ๊ตญ ํ๋ฆฌ์ฐ๋ ์ํ๋ฐฐ์ฐ๋ค ๋ผ๋ฆฌ ์ผ๋น ๋ฒ ์ด์ปจ ๊ฒ์์ ํ์๋ ๋์ค๋ ๋จ๊ณ์ ์ด ํฉ์ด ๊ฐ์ฅ ์ ์ ์ฌ๋์ด๋ผ๊ณ ํ๋ค.
์ค๋์ Baekjoon Online Judge์ ์ ์ ์ค์์ ์ผ๋น ๋ฒ ์ด์ปจ์ ์๊ฐ ๊ฐ์ฅ ์์ ์ฌ๋์ ์ฐพ์ผ๋ ค๊ณ ํ๋ค. ์ผ๋น ๋ฒ ์ด์ปจ ์๋ ๋ชจ๋ ์ฌ๋๊ณผ ์ผ๋น ๋ฒ ์ด์ปจ ๊ฒ์์ ํ์ ๋, ๋์ค๋ ๋จ๊ณ์ ํฉ์ด๋ค.
์๋ฅผ ๋ค์ด, BOJ์ ์ ์ ๊ฐ 5๋ช ์ด๊ณ , 1๊ณผ 3, 1๊ณผ 4, 2์ 3, 3๊ณผ 4, 4์ 5๊ฐ ์น๊ตฌ์ธ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์.
1์ 2๊น์ง 3์ ํตํด 2๋จ๊ณ ๋ง์, 3๊น์ง 1๋จ๊ณ, 4๊น์ง 1๋จ๊ณ, 5๊น์ง 4๋ฅผ ํตํด์ 2๋จ๊ณ ๋ง์ ์ ์ ์๋ค. ๋ฐ๋ผ์, ์ผ๋น ๋ฒ ์ด์ปจ์ ์๋ 2+1+1+2 = 6์ด๋ค.
2๋ 1๊น์ง 3์ ํตํด์ 2๋จ๊ณ ๋ง์, 3๊น์ง 1๋จ๊ณ ๋ง์, 4๊น์ง 3์ ํตํด์ 2๋จ๊ณ ๋ง์, 5๊น์ง 3๊ณผ 4๋ฅผ ํตํด์ 3๋จ๊ณ ๋ง์ ์ ์ ์๋ค. ๋ฐ๋ผ์, ์ผ๋น ๋ฒ ์ด์ปจ์ ์๋ 2+1+2+3 = 8์ด๋ค.
3์ 1๊น์ง 1๋จ๊ณ, 2๊น์ง 1๋จ๊ณ, 4๊น์ง 1๋จ๊ณ, 5๊น์ง 4๋ฅผ ํตํด 2๋จ๊ณ ๋ง์ ์ ์ ์๋ค. ๋ฐ๋ผ์, ์ผ๋น ๋ฒ ์ด์ปจ์ ์๋ 1+1+1+2 = 5์ด๋ค.
4๋ 1๊น์ง 1๋จ๊ณ, 2๊น์ง 3์ ํตํด 2๋จ๊ณ, 3๊น์ง 1๋จ๊ณ, 5๊น์ง 1๋จ๊ณ ๋ง์ ์ ์ ์๋ค. 4์ ์ผ๋น ๋ฒ ์ด์ปจ์ ์๋ 1+2+1+1 = 5๊ฐ ๋๋ค.
๋ง์ง๋ง์ผ๋ก 5๋ 1๊น์ง 4๋ฅผ ํตํด 2๋จ๊ณ, 2๊น์ง 4์ 3์ ํตํด 3๋จ๊ณ, 3๊น์ง 4๋ฅผ ํตํด 2๋จ๊ณ, 4๊น์ง 1๋จ๊ณ ๋ง์ ์ ์ ์๋ค. 5์ ์ผ๋น ๋ฒ ์ด์ปจ์ ์๋ 2+3+2+1 = 8์ด๋ค.
5๋ช ์ ์ ์ ์ค์์ ์ผ๋น ๋ฒ ์ด์ปจ์ ์๊ฐ ๊ฐ์ฅ ์์ ์ฌ๋์ 3๊ณผ 4์ด๋ค.
BOJ ์ ์ ์ ์์ ์น๊ตฌ ๊ด๊ณ๊ฐ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋, ์ผ๋น ๋ฒ ์ด์ปจ์ ์๊ฐ ๊ฐ์ฅ ์์ ์ฌ๋์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ ์ ์ N (2 ≤ N ≤ 100)๊ณผ ์น๊ตฌ ๊ด๊ณ์ ์ M (1 ≤ M ≤ 5,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์๋ ์น๊ตฌ ๊ด๊ณ๊ฐ ์ฃผ์ด์ง๋ค. ์น๊ตฌ ๊ด๊ณ๋ A์ B๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, A์ B๊ฐ ์น๊ตฌ๋ผ๋ ๋ป์ด๋ค. A์ B๊ฐ ์น๊ตฌ์ด๋ฉด, B์ A๋ ์น๊ตฌ์ด๋ฉฐ, A์ B๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ ์๋ค. ์น๊ตฌ ๊ด๊ณ๋ ์ค๋ณต๋์ด ๋ค์ด์ฌ ์๋ ์์ผ๋ฉฐ, ์น๊ตฌ๊ฐ ํ ๋ช ๋ ์๋ ์ฌ๋์ ์๋ค. ๋, ๋ชจ๋ ์ฌ๋์ ์น๊ตฌ ๊ด๊ณ๋ก ์ฐ๊ฒฐ๋์ด์ ธ ์๋ค. ์ฌ๋์ ๋ฒํธ๋ 1๋ถํฐ N๊น์ง์ด๋ฉฐ, ๋ ์ฌ๋์ด ๊ฐ์ ๋ฒํธ๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ๋ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ BOJ์ ์ ์ ์ค์์ ์ผ๋น ๋ฒ ์ด์ปจ์ ์๊ฐ ๊ฐ์ฅ ์์ ์ฌ๋์ ์ถ๋ ฅํ๋ค. ๊ทธ๋ฐ ์ฌ๋์ด ์ฌ๋ฌ ๋ช ์ผ ๊ฒฝ์ฐ์๋ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ์ฌ๋์ ์ถ๋ ฅํ๋ค.
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ํ๋ก๊ทธ๋๋จธ์ค - ๊ธฐ๋ฅ๊ณผ ๋ณด ์ค์น(2020 KAKAO BLIND RECRUITMENT) (1) | 2020.08.22 |
---|---|
[python] ํ๋ก๊ทธ๋๋จธ์ค - ๋ฌธ์์ด ์์ถ(2020 KAKAO BLIND RECRUITMENT) (0) | 2020.08.21 |
[python] ๋ฐฑ์ค - 1074. Z (0) | 2020.08.19 |
[python] ๋ฐฑ์ค - 11048. ์ด๋ํ๊ธฐ (0) | 2020.08.18 |
[python] SWEA - 4261. ๋น ๋ฅธ ํด๋์ ํ ํคํจ๋ (0) | 2020.08.17 |