[BOJ] 15686.์นํจ๋ฐฐ๋ฌ (Python)
by ๋๋ถ๋
15686๋ฒ: ์นํจ ๋ฐฐ๋ฌ
ํฌ๊ธฐ๊ฐ N×N์ธ ๋์๊ฐ ์๋ค. ๋์๋ 1×1ํฌ๊ธฐ์ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ๋์์ ๊ฐ ์นธ์ ๋น ์นธ, ์นํจ์ง, ์ง ์ค ํ๋์ด๋ค. ๋์์ ์นธ์ (r, c)์ ๊ฐ์ ํํ๋ก ๋ํ๋ด๊ณ , rํ c์ด ๋๋ ์์์๋ถํฐ r๋ฒ์งธ ์นธ
www.acmicpc.net
์ด ๋ฌธ์ ์์๋ NxN ํฌ๊ธฐ์ ๋์๊ฐ ์ฃผ์ด์ง๋ฉฐ, ๋์์ ๊ฐ ์นธ์ ๋น ์นธ(0), ์ง(1), ์นํจ์ง(2) ์ค ํ๋๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
์นํจ ๊ฑฐ๋ฆฌ๋ ์ง๊ณผ ๊ฐ์ฅ ๊ฐ๊น์ด ์นํจ์ง ์ฌ์ด์ ๊ฑฐ๋ฆฌ์ด๋ฉฐ, ๋์์ ์นํจ ๊ฑฐ๋ฆฌ๋ ๋ชจ๋ ์ง์ ์นํจ ๊ฑฐ๋ฆฌ ํฉ์ ๋๋ค.
๊ฑฐ๋ฆฌ d = |r1 - r2| + |c1 -c2| ๋ก ๊ตฌํฉ๋๋ค.
๋์์ ์๋ ์นํจ์ง ์ค ์ต๋ M๊ฐ๋ฅผ ๊ณ ๋ฅด๊ณ ๋๋จธ์ง๋ ํ์ ์ํฌ ๋, ๋์์ ์นํจ ๊ฑฐ๋ฆฌ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ ๋๋ค.
์นํจ์ง์ M๊ฐ์ฉ ์กฐํฉ์ ํตํด ๋ง๋ค๊ณ ,
๊ฐ ์กฐํฉ์ ๋ํ ๋์์ ์นํจ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ฉฐ ์ต์๊ฐ์ ์ฐพ๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์์ต๋๋ค.
# ์นํจ๋ฐฐ๋ฌ
import sys
def distance(chicken) : # ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ ํจ์
dist = 0
for r1, c1 in home :
dist += min([(abs(r1-r2) + abs(c1-c2)) for r2, c2 in chicken])
return dist
def dfs(L, cur) : # ์กฐํฉ์ ๋ง๋ค์ด ์นํจ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ ์ฐพ๋ ํจ์
global min_dist
if L == M :
select_chicken = [chicken[i] for i in range(chilen) if visited[i]]
min_dist = min(min_dist, distance(select_chicken))
return
for i in range(cur, chilen) :
if visited[i] == 0 :
visited[i] = 1
dfs(L + 1, i + 1)
visited[i] = 0
if __name__=="__main__" :
input = sys.stdin.readline
N, M = map(int, input().split()) # ๋์ ํฌ๊ธฐ, ์นํจ์ง ๊ฐ์
city = [] # ๋์
chicken = [] # ์นํจ์ง
home = [] # ์ง
for r in range(N) :
temp = list(map(int, input().split()))
city.append(temp) # ๋์์ ๊ฐ ํ์ ๋ํ ์ ๋ณด ์ถ๊ฐ
for c in range(N) :
if temp[c] == 2 :# ์นํจ์ง์ธ ๊ฒฝ์ฐ
chicken.append((r,c))
elif temp[c] == 1 : # ์ง์ธ ๊ฒฝ์ฐ
home.append((r,c))
if len(chicken) == M : # ์ด๋ฏธ M๊ฐ์ด๋ฏ๋ก ์นํจ์ง์ ํ์
์ํฌ ํ์๊ฐ ์์
print(distance(chicken))
else : # M๊ฐ์ฉ ์กฐํฉ์ ๋ง๋ค์ด ๋์์ ์นํจ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ ์ฐพ์์ผ ํจ
min_dist = 2147000000 # ๋๋ต์ ์ธ ํฐ ์๋ก ๋์์ ์นํจ ๊ฑฐ๋ฆฌ ์ด๊ธฐํ
chilen = len(chicken)
visited = [0] * chilen
dfs(0, 0)
print(min_dist)
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 15685.๋๋๊ณค์ปค๋ธ (Python) (0) | 2021.04.23 |
---|---|
[BOJ] 17406.๋ฐฐ์ด๋๋ฆฌ๊ธฐ4 (0) | 2021.04.22 |
[BOJ] 17140.์ด์ฐจ์๋ฐฐ์ด๊ณผ ์ฐ์ฐ (Python) (0) | 2021.04.21 |
[BOJ] 14890.๊ฒฝ์ฌ๋ก (Python) (0) | 2021.04.20 |
[BOJ] 1929.์์๊ตฌํ๊ธฐ (Python) (0) | 2021.04.19 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
๋๋ถ๋์ Devlog
๋๋ถ๋