5208. [ํ์ด์ฌ S/W ๋ฌธ์ ํด๊ฒฐ ๊ตฌํ] 5์ผ์ฐจ - ์ ๊ธฐ๋ฒ์ค2
์ถฉ์ ์ง๋ฅผ ๊ตํํ๋ ๋ฐฉ์์ ์ ๊ธฐ๋ฒ์ค๋ฅผ ์ดํํ๋ ค๊ณ ํ๋ค. ์ ๋ฅ์ฅ์๋ ๊ต์ฒด์ฉ ์ถฉ์ ์ง๊ฐ ์๋ ๊ตํ๊ธฐ๊ฐ ์๊ณ , ์ถฉ์ ์ง๋ง๋ค ์ต๋๋ก ์ดํํ ์ ์๋ ์ ๋ฅ์ฅ ์๊ฐ ์ ํด์ ธ ์๋ค.
์ถฉ์ ์ง๊ฐ ๋ฐฉ์ ๋๊ธฐ ์ ์ ๊ต์ฒดํ๋ฉฐ ์ดํํด์ผ ํ๋๋ฐ ๊ต์ฒดํ๋ ์๊ฐ์ ์ค์ด๋ ค๋ฉด ์ต์ํ์ ๊ต์ฒด ํ์๋ก ๋ชฉ์ ์ง์ ๋์ฐฉํด์ผ ํ๋ค.
์ ๋ฅ์ฅ๊ณผ ์ถฉ์ ์ง์ ๋ํ ์ ๋ณด๊ฐ ์ฃผ์ด์ง ๋, ๋ชฉ์ ์ง์ ๋์ฐฉํ๋๋ฐ ํ์ํ ์ต์ํ์ ๊ตํํ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋์์ค. ๋จ, ์ถ๋ฐ์ง์์์ ๋ฐฐํฐ๋ฆฌ ์ฅ์ฐฉ์ ๊ตํํ์์์ ์ ์ธํ๋ค.
๋ค์์ 1๋ฒ์์ ์ถ๋ฐ 5๋ฒ์ด ์ข ์ ์ธ ๊ฒฝ์ฐ์ ์์ด๋ค.
์ ๋ฅ์ฅ | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
์ถฉ์ ์ง | 2 | 3 | 1 | 1 |
1๋ฒ์์ ์ฅ์ฐฉํ ์ถฉ์ ์ง ์ฉ๋์ด 2์ด๋ฏ๋ก, 3๋ฒ ์ ๋ฅ์ฅ๊น์ง ์ดํํ ์ ์๋ค. ๊ทธ๋ฌ๋ 2๋ฒ์์ ๋ฏธ๋ฆฌ ๊ต์ฒดํ๋ฉด ์ข ์ ๊น์ง ๊ฐ ์ ์๋ค.
๋ง์ง๋ง ์ ๋ฅ์ฅ์๋ ๋ฐฐํฐ๋ฆฌ๊ฐ ์๋ค.
[์ ๋ ฅ]
์ฒซ ์ค์ ํ ์คํธ์ผ์ด์ค์ ์ T๊ฐ ์ฃผ์ด์ง๋ค. 1<=T<=50
๋ค์ ์ค๋ถํฐ ํ ์คํธ ์ผ์ด์ค์ ๋ณ๋ก ํ ์ค์ ์ ๋ฅ์ฅ ์ N, N-1๊ฐ์ ์ ๋ฅ์ฅ ๋ณ ๋ฐฐํฐ๋ฆฌ ์ฉ๋ Mi๊ฐ ์ฃผ์ด์ง๋ค. 3<=N<=100, 0 ๏ผ Mi ๏ผ N
[์ถ๋ ฅ]
๊ฐ ์ค๋ง๋ค "#T" (T๋ ํ ์คํธ ์ผ์ด์ค ๋ฒํธ)๋ฅผ ์ถ๋ ฅํ ๋ค, ๋ต์ ์ถ๋ ฅํ๋ค
์
๋ ฅ
3
5 2 3 1 1
10 2 1 3 2 2 5 4 2 1
10 1 1 2 1 2 2 1 2 1
์ถ๋ ฅ
#1 1
#2 2
#3 5
def dfs(n, cnt, sm):
global ans
# ๊ฐ์ง์น๊ธฐ
if ans <= cnt:
return
# ๊ธฐ์ ์กฐ๊ฑด
if n == N:
ans = min(ans, cnt)
return
# ๋ฉ์ธ ๋ก์ง
dfs(n+1, cnt+1, lst[n]-1) # ์ถฉ์ ๊ธฐ ๊ตํ์ ํ ๋
if sm > 0:
dfs(n+1, cnt, sm-1) # ์ถฉ์ ๊ธฐ ๊ตํ์ ํ์ง ์์ ๋
T = int(input())
for tc in range(1, T+1):
lst = list(map(int, input().split()))
N = lst[0]
# ์ต๋๋ก ์ถฉ์ ๊ธฐ๋ฅผ ๊ตํํ๋ ํ์
ans = N
dfs(2, 0, lst[1]-1)
# ์ถ๋ ฅ
print(f'#{tc} {ans}')
def dfs(n, cnt, sm):
global ans
# ๊ฐ์ง์น๊ธฐ
if ans <= cnt:
return
# ๊ธฐ์ ์กฐ๊ฑด
if n == N:
ans = min(ans, cnt)
return
# ๋ฉ์ธ ๋ก์ง
# ์ ๋งํ ๋ต์ด ๋จผ์ ๋์ค๋ ๋ฐฉํฅ์ผ๋ก ํธ์ถ์ ์งํํ๋ฉด ๊ฐ์ง์น๊ธฐ๋ฅผ ์๊ฐ์ ์๋ ์ ์๋ค.
if sm > 0:
dfs(n+1, cnt, sm-1) # ์ถฉ์ ๊ธฐ ๊ตํ์ ํ์ง ์์ ๋
dfs(n+1, cnt+1, lst[n]-1) # ์ถฉ์ ๊ธฐ ๊ตํ์ ํ ๋
T = int(input())
for tc in range(1, T+1):
lst = list(map(int, input().split()))
N = lst[0]
# ์ต๋๋ก ์ถฉ์ ๊ธฐ๋ฅผ ๊ตํํ๋ ํ์
ans = N
dfs(2, 0, lst[1]-1)
# ์ถ๋ ฅ
print(f'#{tc} {ans}')