๐ฆฅ ์ฝํ
/BAEKJOON
[BAEKJOON python] 15686_์นํจ ๋ฐฐ๋ฌ
์ง์ง์ํ์นด
2022. 10. 14. 16:29
728x90
๋ฐ์ํ
ํฌ๊ธฐ๊ฐ N×N์ธ ๋์๊ฐ ์๋ค. ๋์๋ 1×1ํฌ๊ธฐ์ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค.๋์์ ๊ฐ ์นธ์ ๋น ์นธ, ์นํจ์ง, ์ง ์ค ํ๋์ด๋ค.๋์์ ์นธ์ (r, c)์ ๊ฐ์ ํํ๋ก ๋ํ๋ด๊ณ ,rํ c์ด ๋๋ ์์์๋ถํฐ r๋ฒ์งธ ์นธ, ์ผ์ชฝ์์๋ถํฐ c๋ฒ์งธ ์นธ์ ์๋ฏธํ๋ค. r๊ณผ c๋ 1๋ถํฐ ์์
์นํจ ๊ฑฐ๋ฆฌ๋ ์ง๊ณผ ๊ฐ์ฅ ๊ฐ๊น์ด ์นํจ์ง ์ฌ์ด์ ๊ฑฐ๋ฆฌ์ด๋ค.์นํจ ๊ฑฐ๋ฆฌ๋ ์ง์ ๊ธฐ์ค์ผ๋ก ์ ํด์ง๋ฉฐ, ๊ฐ๊ฐ์ ์ง์ ์นํจ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.๋์์ ์นํจ ๊ฑฐ๋ฆฌ๋ ๋ชจ๋ ์ง์ ์นํจ ๊ฑฐ๋ฆฌ์ ํฉ์ด๋ค
์์์ ๋ ์นธ (r1, c1)๊ณผ (r2, c2) ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ |r1-r2| + |c1-c2|๋ก ๊ตฌํ๋ค.0์ ๋น ์นธ, 1์ ์ง, 2๋ ์นํจ์ง์ด๋ค.
์ด ๋์์ ์๋ ์นํจ์ง์ ๋ชจ๋ ๊ฐ์ ํ๋์ฐจ์ด์ฆ์ด๋ค.ํ๋ ์ฐจ์ด์ฆ ๋ณธ์ฌ์์๋ ์์ต์ ์ฆ๊ฐ์ํค๊ธฐ ์ํด ์ผ๋ถ ์นํจ์ง์ ํ์ ์ํค๋ ค๊ณ ํ๋ค.์ค๋ ์ฐ๊ตฌ ๋์ ์ด ๋์์์ ๊ฐ์ฅ ์์ต์ ๋ง์ด ๋ผ ์ ์๋ ์นํจ์ง์ ๊ฐ์๋ ์ต๋ M๊ฐ
๋์์ ์๋ ์นํจ์ง ์ค์์ ์ต๋ M๊ฐ๋ฅผ ๊ณ ๋ฅด๊ณ , ๋๋จธ์ง ์นํจ์ง์ ๋ชจ๋ ํ์ ์์ผ์ผ ํ๋ค.์ด๋ป๊ฒ ๊ณ ๋ฅด๋ฉด, ๋์์ ์นํจ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์๊ฒ ๋ ์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑ
์ฒซ์งธ ์ค์ N(2 ≤ N ≤ 50)๊ณผ M(1 ≤ M ≤ 13)์ด ์ฃผ์ด์ง๋ค.๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๋์์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค.๋์์ ์ ๋ณด๋ 0, 1, 2๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , 0์ ๋น ์นธ, 1์ ์ง, 2๋ ์นํจ์ง์ ์๋ฏธ์ง์ ๊ฐ์๋ 2N๊ฐ๋ฅผ ๋์ง ์์ผ๋ฉฐ, ์ ์ด๋ 1๊ฐ๋ ์กด์ฌ์นํจ์ง์ ๊ฐ์๋ M๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 13๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
์ฒซ์งธ ์ค์ ํ์ ์ํค์ง ์์ ์นํจ์ง์ ์ต๋ M๊ฐ๋ฅผ ๊ณจ๋์ ๋, ๋์์ ์นํจ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ ์ถ๋ ฅ
from itertools import combinations
N, M = map(int, input().split())
# ์กฐํฉ์ผ๋ก M๊ฐ ๋ฝ๊ณ , ๊ฐ๊ฐ ์นํจ ๊ฑฐ๋ฆฌ ๊ตฌํ๊ณ , ๋์์ ์นํจ๊ฑฐ๋ฆฌ๋ฅผ ์ต์๊ฐ ๊ณ์ ๊ฐฑ์
city = []
for i in range(N) :
# 0์ ๋น ์นธ, 1์ ์ง, 2๋ ์นํจ์ง
city.append(list(map(int, input().split())))
house = []
chicken = []
for i in range(N) :
for j in range(N) :
# ์ง์ด๋ฉด
if city[i][j] == 1 :
house.append([i, j])
# ์นํจ์ง์ด๋ฉด
elif city[i][j] == 2 :
chicken.append([i, j])
# ์นํจ์ง์ M๊ฐ ์ ํํ์ ๋
combi = list(combinations(chicken, M))
result = []
for com in combi :
answer = 0
for h in house :
x1, y1 = h
dist = int(1e9)
for c in com :
x2, y2 = c
dist = min(dist, abs(x1-x2) + abs(y1-y2))
answer += dist
result.append(answer)
print(min(result))
728x90
๋ฐ์ํ