์๋ ํ์ธ์! ์ค๋์ ๋ฐฑ์ค์ 1068๋ฒ ๋ฌธ์ ์ธ “ํธ๋ฆฌ” ๋ฌธ์ ๋ฅผ ํจ๊ป ํ์ด๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ฌธ์ ๋ ํธ๋ฆฌ ๊ตฌ์กฐ์์ ํน์ ๋ ธ๋๋ฅผ ์ ๊ฑฐํ์ ๋ ๋จ์ ํธ๋ฆฌ์ ๋ฆฌํ ๋ ธ๋์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ ๋๋ค.
1. ๋ฌธ์ ์ค๋ช
1) ๋ฌธ์ ๊ฐ์
• ์ฃผ์ด์ง ํธ๋ฆฌ์์ ํน์ ๋ ธ๋๋ฅผ ์ ๊ฑฐํ๊ณ , ๋จ์ ํธ๋ฆฌ์ ๋ฆฌํ ๋ ธ๋์ ๊ฐ์๋ฅผ ์ธ๋ ๋ฌธ์ ์ ๋๋ค.
• ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋๋ 0๋ถํฐ N-1๊น์ง ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์์ต๋๋ค.
• ์ฃผ์ด์ง๋ ํธ๋ฆฌ์ ๋ ธ๋ ์ N์ 1 ์ด์ 50 ์ดํ์ ๋๋ค.
2) ์ ๋ ฅ
• ์ฒซ ์ค์ ํธ๋ฆฌ์ ๋ ธ๋ ์ N์ด ์ฃผ์ด์ง๋๋ค.
• ๋ ๋ฒ์งธ ์ค์ ๊ฐ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๋ํ๋ด๋ N๊ฐ์ ์ ์๊ฐ ์ฃผ์ด์ง๋๋ค. ๋ถ๋ชจ ๋ ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ์๋ -1์ด ์ฃผ์ด์ง๋๋ค.
• ์ธ ๋ฒ์งธ ์ค์ ์ ๊ฑฐํ ๋ ธ๋์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋๋ค.
3) ์ถ๋ ฅ
• ์ ๊ฑฐ๋ ๋ ธ๋๋ฅผ ์ ์ธํ ๋๋จธ์ง ํธ๋ฆฌ์์ ๋ฆฌํ ๋ ธ๋์ ๊ฐ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
๋ฌธ์ URL: https://www.acmicpc.net/problem/1068
2. ์ ๊ทผ๋ฒ
1) ์ ๋ ฅ๋ฐ๊ธฐ
• sys.stdin.readline์ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ์๋๋ฅผ ๋์ ๋๋ค.
• ์ฒซ ๋ฒ์งธ ์ค์์ N(๋ ธ๋์ ์)์ ์ ๋ ฅ๋ฐ๊ณ , ๋ ๋ฒ์งธ ์ค์์ ๊ฐ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ์ธ ๋ฒ์งธ ์ค์์ ์ ๊ฑฐํ ๋ ธ๋์ ๋ฒํธ๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค.
2) ํธ๋ฆฌ ๊ตฌ์กฐ ์ดํด ๋ฐ ์ ๊ฑฐ๋ ๋ ธ๋ ํ์
• ํธ๋ฆฌ์ ๋ฃจํธ ๋ ธ๋๋ฅผ ์ฐพ์ต๋๋ค (๋ถ๋ชจ๊ฐ -1์ธ ๋ ธ๋).
• ์ ๊ฑฐ๋ ๋ ธ๋์ ๊ทธ ์์ ๋ ธ๋๋ฅผ ํ์ํ๊ธฐ ์ํด rNode ๋ฐฐ์ด์ ์ฌ์ฉํฉ๋๋ค.
• ์ ๊ฑฐ๋ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋๋ ๊ณ ๋ คํ์ฌ ๋ฆฌํ ๋ ธ๋ ์ฌ๋ถ๋ฅผ ํ๋จํ๊ธฐ ์ํด pNode ๋ฐฐ์ด์ ์ฌ์ฉํฉ๋๋ค.
3) ๋ฆฌํ ๋ ธ๋ ๊ฐ์ ๊ณ์ฐ
• ์ ๊ฑฐ๋ ๋ ธ๋์ ๊ทธ ์์ ๋ ธ๋๋ฅผ ์ ์ธํ๊ณ , ๋ฆฌํ ๋ ธ๋๋ฅผ ๊ณ์ฐํฉ๋๋ค.
3. ์ ๋ต ์ฝ๋
import sys
input = sys.stdin.readline
# ์
๋ ฅ ๋ฐ๊ธฐ
N = int(input()) # ๋
ธ๋์ ์
parent = list(map(int, input().split())) # ๊ฐ ๋
ธ๋์ ๋ถ๋ชจ ๋
ธ๋
rmv = int(input()) # ์ ๊ฑฐํ ๋
ธ๋์ ๋ฒํธ
# ๋ฃจํธ ๋
ธ๋ ์ฐพ๊ธฐ
root = -1
for i in range(N):
if parent[i] == -1: # ๋ถ๋ชจ๊ฐ -1์ธ ๋
ธ๋๊ฐ ๋ฃจํธ ๋
ธ๋
root = i
break
# rNode ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ์ ๊ฑฐ๋ ๋
ธ๋์ ๊ทธ ์์ ๋
ธ๋๋ฅผ ํ์
rNode = [0] * N
for i in range(N):
u = i
while True:
if u == rmv: # ํ์ฌ ๋
ธ๋๊ฐ ์ ๊ฑฐ๋ ๋
ธ๋์ ๊ฐ์ผ๋ฉด
rNode[i] = 1 # ์ ๊ฑฐ๋ ๋
ธ๋๋ก ํ์
break
if u == root: # ๋ฃจํธ ๋
ธ๋์ ๋๋ฌํ๋ฉด PASS
break
u = parent[u] # ๋ถ๋ชจ ๋
ธ๋๋ก ์ด๋
# pNode ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๋ถ๋ชจ๊ฐ ์ ๊ฑฐ๋์ง ์์ ๋
ธ๋๋ฅผ ํ์
pNode = [0] * N
for i in range(N):
if i == root: # ๋ฃจํธ ๋
ธ๋๋ ์ ์ธ
continue
if rNode[i] == 1: # ์ ๊ฑฐ๋ ๋
ธ๋๋ ์ ์ธ
continue
pNode[parent[i]] = 1 # ๋ถ๋ชจ ๋
ธ๋๋ฅผ ํ์
# ๋ฆฌํ ๋
ธ๋์ ๊ฐ์๋ฅผ ์ธ๊ธฐ
ans = 0
for i in range(N):
if rNode[i] != 1 and pNode[i] != 1: # ์ ๊ฑฐ๋ ๋
ธ๋๊ฐ ์๋๊ณ ๋ถ๋ชจ๊ฐ ์๋ ๋
ธ๋
ans += 1 # ๋ฆฌํ ๋
ธ๋๋ก ๊ฐ์ฃผํ๊ณ ๊ฐ์๋ฅผ ์ฆ๊ฐ
print(ans) # ๋ฆฌํ ๋
ธ๋์ ์๋ฅผ ์ถ๋ ฅ
4. ์ฝ๋ ์ค๋ช
[1]
์์
5
-1 0 0 1 1
2
์ ๋ ฅ ์ค๋ช
• ๋ ธ๋ ์ N = 5
• ๋ถ๋ชจ ๋ ธ๋ ๋ฐฐ์ด parent = [-1, 0, 0, 1, 1]
• ๋ ธ๋ 0์ ๋ฃจํธ ๋ ธ๋ (๋ถ๋ชจ๊ฐ -1)
• ๋ ธ๋ 1๊ณผ 2๋ ๋ ธ๋ 0์ ์์
• ๋ ธ๋ 3๊ณผ 4๋ ๋ ธ๋ 1์ ์์
• ์ ๊ฑฐํ ๋ ธ๋ rmv = 2
ํธ๋ฆฌ ๊ตฌ์กฐ
0
/ \
1 2
/ \
3 4
์ ๊ฑฐํ ๋ ธ๋ 2
• ๋ ธ๋ 2๋ฅผ ์ ๊ฑฐํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํธ๋ฆฌ๊ฐ ๋ฉ๋๋ค
0
/
1
/ \
3 4
์ด ์ฝ๋๋ฅผ ์คํํ๋ฉด ์ ๊ฑฐ๋ ๋ ธ๋๋ฅผ ๊ณ ๋ คํ ๋ฆฌํ ๋ ธ๋์ ๊ฐ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค. ์ฃผ์ด์ง ์์ ์์๋ ๋ ธ๋ 2๊ฐ ์ ๊ฑฐ๋์์ผ๋ฏ๋ก, ๋จ์ ํธ๋ฆฌ์์ ๋ฆฌํ ๋ ธ๋๋ 3๋ฒ๊ณผ 4๋ฒ ๋ ๊ฐ์ ๋๋ค.
[2]
๋ค์์ ์ ์ฝ๋์ ๊ฐ ๋จ๊ณ๋ณ ์์ ์ ์์๋๋ก ๋ํ๋ธ ๊ฒ์ ๋๋ค:
1. ์ ๋ ฅ ๋ฐ๊ธฐ
• ๋ ธ๋ ์ N, ๋ถ๋ชจ ๋ ธ๋ ๋ฐฐ์ด parent, ์ ๊ฑฐํ ๋ ธ๋ rmv๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค.
2. ๋ฃจํธ ๋ ธ๋ ์ฐพ๊ธฐ
• ๋ถ๋ชจ ๋ ธ๋๊ฐ -1์ธ ๋ ธ๋๋ฅผ ๋ฃจํธ ๋ ธ๋๋ก ์ค์ ํฉ๋๋ค.
3. ์ ๊ฑฐ๋ ๋ ธ๋์ ์์ ๋ ธ๋ ํ์
• ์ ๊ฑฐ๋ ๋ ธ๋์ ๊ทธ ์์ ๋ ธ๋๋ฅผ ํ์ํฉ๋๋ค.
4. ๋ถ๋ชจ ๋ ธ๋ ํ์
• ๋ถ๋ชจ๊ฐ ์ ๊ฑฐ๋์ง ์์ ๋ ธ๋๋ฅผ ํ์ํฉ๋๋ค.
5. ๋ฆฌํ ๋ ธ๋ ๊ฐ์ ์ธ๊ธฐ
• ์ ๊ฑฐ๋ ๋ ธ๋๊ฐ ์๋๊ณ ๋ถ๋ชจ ๋ ธ๋๋ ์๋ ๋ ธ๋๋ฅผ ๋ฆฌํ ๋ ธ๋๋ก ๊ฐ์ฃผํ์ฌ ๊ฐ์๋ฅผ ์ ๋๋ค.
6. ์ถ๋ ฅ
• ๋ฆฌํ ๋ ธ๋์ ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
5. Github์ผ๋ก ํ์ธ
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ(๋ฐฑ์ค) 2606[๋ฐ์ด๋ฌ์ค] (0) | 2024.07.08 |
---|---|
BOJ(๋ฐฑ์ค) 14267[ํ์ฌ ๋ฌธํ 1] (0) | 2024.07.07 |
BOJ(๋ฐฑ์ค) 10819[์ฐจ์ด๋ฅผ ์ต๋๋ก] (0) | 2024.07.05 |
BOJ(๋ฐฑ์ค) 14465[์๊ฐ ๊ธธ์ ๊ฑด๋๊ฐ ์ด์ 5] (0) | 2024.07.04 |
BOJ(๋ฐฑ์ค) 11728[๋ฐฐ์ด ํฉ์น๊ธฐ] (0) | 2024.07.01 |