์ด๋ฒ ๊ธ์์๋ ๋ฐฑ์ค 5567๋ฒ ๋ฌธ์ ์ธ “๊ฒฐํผ์”์ ํจ๊ป ํด๊ฒฐํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ฌธ์ ๋ ์๊ทผ์ด์ ๊ฒฐํผ์์ ์ด๋ํ ์น๊ตฌ์ ์น๊ตฌ์ ์น๊ตฌ๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ ๋๋ค.
๋ฌธ์ URL : https://www.acmicpc.net/problem/5567
1. ๋ฌธ์ ์ค๋ช
1) ๋ฌธ์ ๊ฐ์
• ์๊ทผ์ด์ ๊ฒฐํผ์์ ์ด๋ํ ์ฌ๋๋ค์ ์ฐพ๋ ๋ฌธ์ ์ ๋๋ค.
• ์๊ทผ์ด์ ์น๊ตฌ์ ์น๊ตฌ์ ์น๊ตฌ๋ฅผ ๊ฒฐํผ์์ ์ด๋ํด์ผ ํฉ๋๋ค.
2) ์ ๋ ฅ
• ์ฒซ ๋ฒ์งธ ์ค์ ์ฌ๋์ ์ n์ด ์ฃผ์ด์ง๋๋ค. (1 ≤ n ≤ 500)
• ๋ ๋ฒ์งธ ์ค์ ์น๊ตฌ ๊ด๊ณ์ ์ m์ด ์ฃผ์ด์ง๋๋ค. (0 ≤ m ≤ 10000)
• ๋ค์ m๊ฐ์ ์ค์ ์น๊ตฌ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๋ ์ ์ a์ b๊ฐ ์ฃผ์ด์ง๋๋ค. (1 ≤ a, b ≤ n, a ≠ b)
3) ์ถ๋ ฅ
• ์๊ทผ์ด์ ๊ฒฐํผ์์ ์ด๋ํ ์ฌ๋์ ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
2. ์ ๊ทผ๋ฒ
1) ์ ๋ ฅ๋ฐ๊ธฐ
• sys.stdin.readline์ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ์๋๋ฅผ ๋์ ๋๋ค.
• ์ฒซ ๋ฒ์งธ ์ค์์ ์ฌ๋์ ์ n์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ๋ ๋ฒ์งธ ์ค์์ ์น๊ตฌ ๊ด๊ณ์ ์ m์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ๋ค์ m๊ฐ์ ์ค์์ ์น๊ตฌ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๋ ์ ์ a์ b๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค.
2) ์น๊ตฌ ๊ด๊ณ ์ ์ฅ
• ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์ฌ๋๋ง๋ค ์น๊ตฌ ๋ชฉ๋ก์ ์ ์ฅํฉ๋๋ค.
3) ์๊ทผ์ด์ ์น๊ตฌ์ ์น๊ตฌ์ ์น๊ตฌ ์ฐพ๊ธฐ
• ์๊ทผ์ด์ ์น๊ตฌ ๋ชฉ๋ก์ ๋ฐฐ์ด f1์ ์ ์ฅํฉ๋๋ค.
• ์๊ทผ์ด ์น๊ตฌ์ ์น๊ตฌ ๋ชฉ๋ก์ ๋ฐฐ์ด f2์ ์ ์ฅํฉ๋๋ค.
• ์๊ทผ์ด์ ์น๊ตฌ์ ์น๊ตฌ์ ์น๊ตฌ์ ์๋ฅผ ๋ํ์ฌ ์ถ๋ ฅํฉ๋๋ค.
3. ์ ๋ต ์ฝ๋
import sys
input = sys.stdin.readline
# ์
๋ ฅ๋ฐ๊ธฐ
n = int(input()) # n: ์ฌ๋์ ์ (์๊ทผ์ด ํฌํจ)
m = int(input()) # m: ์น๊ตฌ ๊ด๊ณ์ ์
adj = [[] for _ in range(n)] # ์ธ์ ๋ฆฌ์คํธ ์์ฑ (๊ฐ ์ฌ๋๋ง๋ค ์น๊ตฌ ๋ชฉ๋ก)
f1 = [0] * n # ์๊ทผ์ด์ ์น๊ตฌ ๋ชฉ๋ก
f2 = [0] * n # ์๊ทผ์ด ์น๊ตฌ์ ์น๊ตฌ ๋ชฉ๋ก
# ์น๊ตฌ ๊ด๊ณ ์
๋ ฅ๋ฐ๊ธฐ
for _ in range(m):
a, b = map(int, input().split())
adj[a-1].append(b-1) # ์ธ์ ๋ฆฌ์คํธ์ ์น๊ตฌ ์ถ๊ฐ (0-indexed)
adj[b-1].append(a-1) # ์๋ฐฉํฅ ๊ด๊ณ์ด๋ฏ๋ก ์์ชฝ์ ์ถ๊ฐ
# ์๊ทผ์ด์ ์น๊ตฌ ์ฐพ๊ธฐ
for i in adj[0]: # ์๊ทผ์ด์ ์น๊ตฌ๋ค์ ์ํ
f1[i] = 1 # ์น๊ตฌ๋ก ํ์
# ์๊ทผ์ด ์น๊ตฌ์ ์น๊ตฌ ์ฐพ๊ธฐ
for i in range(n):
if f1[i] != 1: # ์๊ทผ์ด์ ์น๊ตฌ๊ฐ ์๋๋ฉด ๋ฌด์
continue
for j in adj[i]: # ์๊ทผ์ด ์น๊ตฌ์ ์น๊ตฌ๋ค์ ์ํ
if j != 0 and f1[j] == 0: # ์๊ทผ์ด ๋ณธ์ธ์ด ์๋๊ณ , ์ด๋ฏธ ์น๊ตฌ๋ก ํ์๋ ์ ์ด ์์ผ๋ฉด
f2[j] = 1 # ์น๊ตฌ์ ์น๊ตฌ๋ก ํ์
# ์๊ทผ์ด์ ์น๊ตฌ์ ์น๊ตฌ์ ์น๊ตฌ์ ์๋ฅผ ๋ํ์ฌ ์ถ๋ ฅ
print(sum(f1) + sum(f2))
4. ์ฝ๋ ์ค๋ช
1) ์ ๋ ฅ ๋ฐ๊ธฐ
• ์ฒซ์งธ ์ค์์ ์ฌ๋์ ์ n์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ๋์งธ ์ค์์ ์น๊ตฌ ๊ด๊ณ์ ์ m์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ๋ค์ m๊ฐ์ ์ค์์ ์น๊ตฌ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๋ ์ ์ a์ b๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค.
2) ์น๊ตฌ ๊ด๊ณ ์ ์ฅ
• ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์ฌ๋๋ง๋ค ์น๊ตฌ ๋ชฉ๋ก์ ์ ์ฅํฉ๋๋ค.
3) ์์์ ์๊ฐ์ ์ค๋ช
์์
์๋ฅผ ๋ค์ด, ์ ๋ ฅ์ด ๋ค์๊ณผ ๊ฐ๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
n = 6
m = 5
์น๊ตฌ ๊ด๊ณ:
1 2
1 3
2 3
2 4
3 5
์น๊ตฌ ๊ด๊ณ๋ฅผ ์๊ฐ์ ์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค
1 - 2
| \
3 4
|
5
ํ์ด ๊ณผ์
1] ์๊ทผ์ด์ ์น๊ตฌ ์ฐพ๊ธฐ
• 1๋ฒ ์ฌ๋์ ์น๊ตฌ๋ 2๋ฒ๊ณผ 3๋ฒ์ ๋๋ค. ๋ฐ๋ผ์ f1 ๋ฐฐ์ด์ [0, 1, 1, 0, 0, 0]๊ฐ ๋ฉ๋๋ค.
2] ์๊ทผ์ด ์น๊ตฌ์ ์น๊ตฌ ์ฐพ๊ธฐ
• 2๋ฒ ์ฌ๋์ ์น๊ตฌ: 1, 3, 4
• 3๋ฒ ์ฌ๋์ ์น๊ตฌ: 1, 2, 5
• ์ด๋ฏธ ์๊ทผ์ด์ ์น๊ตฌ์ธ 1๋ฒ, 2๋ฒ, 3๋ฒ์ ์ ์ธํ๊ณ ์น๊ตฌ์ ์น๊ตฌ ๋ชฉ๋ก์ 4๋ฒ๊ณผ 5๋ฒ์ด ๋ฉ๋๋ค. ๋ฐ๋ผ์ f2 ๋ฐฐ์ด์ [0, 0, 0, 1, 1, 0]๊ฐ ๋ฉ๋๋ค.
3] ๊ฒฐ๊ณผ ์ถ๋ ฅ
• ์๊ทผ์ด์ ์น๊ตฌ์ ์น๊ตฌ์ ์น๊ตฌ์ ์๋ sum(f1) + sum(f2)์ ๋๋ค.
• ์ด ๊ฒฝ์ฐ 2 + 2 = 4์ด๋ฏ๋ก, ๊ฒฐํผ์์ ์ด๋ํ ์ฌ๋์ ์๋ 4๋ช ์ ๋๋ค.
์๊ฐ ๋ณต์ก๋
์ด ๋ฌธ์ ์ ์๊ฐ ๋ณต์ก๋๋ ์ฃผ์ด์ง ์ ๋ ฅ์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ฐํ ์ ์์ต๋๋ค
1. ์ ๋ ฅ๋ฐ๊ธฐ ๋ฐ ์ธ์ ๋ฆฌ์คํธ ์์ฑ
• ์ฌ๋์ ์ n๊ณผ ์น๊ตฌ ๊ด๊ณ์ ์ m์ ๋ํด, ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๊ณ ๊ด๊ณ๋ฅผ ์ถ๊ฐํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ O(m)์ ๋๋ค.
2. ์๊ทผ์ด์ ์น๊ตฌ ์ฐพ๊ธฐ
• ์๊ทผ์ด์ ์น๊ตฌ๋ฅผ ์ฐพ๊ธฐ ์ํด ์๊ทผ์ด์ ์น๊ตฌ ๋ชฉ๋ก์ ์ํํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ O(n)์ ๋๋ค.
3. ์๊ทผ์ด ์น๊ตฌ์ ์น๊ตฌ ์ฐพ๊ธฐ
• ๊ฐ ์๊ทผ์ด์ ์น๊ตฌ์ ๋ํด ์น๊ตฌ์ ์น๊ตฌ๋ฅผ ์ฐพ๋ ๊ณผ์ ์์ ๊ฐ ์น๊ตฌ ๋ชฉ๋ก์ ์ํํฉ๋๋ค. ์ด๋ ์ต์ ์ ๊ฒฝ์ฐ ๋ชจ๋ ์น๊ตฌ๋ฅผ ์ํํ๊ฒ ๋๋ฏ๋ก O(n)์ ๋๋ค.
๋ฐ๋ผ์, ์ ์ฒด ์๊ฐ ๋ณต์ก๋๋ O(m + n)์ ๋๋ค. ์ด๋ ์ฌ๋์ ์์ ์น๊ตฌ ๊ด๊ณ์ ์์ ๋น๋กํ์ฌ ์ ํ์ ์ผ๋ก ์ฆ๊ฐํฉ๋๋ค.
5. Github์ผ๋ก ํ์ธ
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ(๋ฐฑ์ค) 1417[๊ตญํ์์ ์ ๊ฑฐ] (0) | 2024.07.17 |
---|---|
BOJ(๋ฐฑ์ค) 14503[๋ก๋ด ์ฒญ์๊ธฐ] (0) | 2024.07.16 |
BOJ(๋ฐฑ์ค) 14888[์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ] (0) | 2024.07.11 |
BOJ(๋ฐฑ์ค) 13458[์ํ ๊ฐ๋ ] (0) | 2024.07.10 |
BOJ(๋ฐฑ์ค) 14889[์คํํธ์ ๋งํฌ] (0) | 2024.07.09 |