๐ณ ๋งํฌ
๐ ๋ฌธ์
ํฌ๊ธฐ๊ฐ NรN์ธ ๋์๊ฐ ์๋ค. ๋์๋ 1ร1ํฌ๊ธฐ์ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ๋์์ ๊ฐ ์นธ์ ๋น ์นธ, ์นํจ์ง, ์ง ์ค ํ๋์ด๋ค. ๋์์ ์นธ์ (r, c)์ ๊ฐ์ ํํ๋ก ๋ํ๋ด๊ณ , rํ c์ด ๋๋ ์์์๋ถํฐ r๋ฒ์งธ ์นธ, ์ผ์ชฝ์์๋ถํฐ c๋ฒ์งธ ์นธ์ ์๋ฏธํ๋ค. r๊ณผ c๋ 1๋ถํฐ ์์ํ๋ค.
์ด ๋์์ ์ฌ๋ ์ฌ๋๋ค์ ์นํจ์ ๋งค์ฐ ์ข์ํ๋ค. ๋ฐ๋ผ์, ์ฌ๋๋ค์ "์นํจ ๊ฑฐ๋ฆฌ"๋ผ๋ ๋ง์ ์ฃผ๋ก ์ฌ์ฉํ๋ค. ์นํจ ๊ฑฐ๋ฆฌ๋ ์ง๊ณผ ๊ฐ์ฅ ๊ฐ๊น์ด ์นํจ์ง ์ฌ์ด์ ๊ฑฐ๋ฆฌ์ด๋ค. ์ฆ, ์นํจ ๊ฑฐ๋ฆฌ๋ ์ง์ ๊ธฐ์ค์ผ๋ก ์ ํด์ง๋ฉฐ, ๊ฐ๊ฐ์ ์ง์ ์นํจ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋์์ ์นํจ ๊ฑฐ๋ฆฌ๋ ๋ชจ๋ ์ง์ ์นํจ ๊ฑฐ๋ฆฌ์ ํฉ์ด๋ค.
์์์ ๋ ์นธ (r1, c1)๊ณผ (r2, c2) ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ |r1-r2| + |c1-c2|๋ก ๊ตฌํ๋ค.
์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ ์ง๋๋ฅผ ๊ฐ๋ ๋์๋ฅผ ์ดํด๋ณด์.
0 2 0 1 0
1 0 1 0 0
0 0 0 0 0
0 0 0 1 1
0 0 0 1 2
0์ ๋น ์นธ, 1์ ์ง, 2๋ ์นํจ์ง์ด๋ค.
(2, 1)์ ์๋ ์ง๊ณผ (1, 2)์ ์๋ ์นํจ์ง๊ณผ์ ๊ฑฐ๋ฆฌ๋ |2-1| + |1-2| = 2, (5, 5)์ ์๋ ์นํจ์ง๊ณผ์ ๊ฑฐ๋ฆฌ๋ |2-5| + |1-5| = 7์ด๋ค. ๋ฐ๋ผ์, (2, 1)์ ์๋ ์ง์ ์นํจ ๊ฑฐ๋ฆฌ๋ 2์ด๋ค.
(5, 4)์ ์๋ ์ง๊ณผ (1, 2)์ ์๋ ์นํจ์ง๊ณผ์ ๊ฑฐ๋ฆฌ๋ |5-1| + |4-2| = 6, (5, 5)์ ์๋ ์นํจ์ง๊ณผ์ ๊ฑฐ๋ฆฌ๋ |5-5| + |4-5| = 1์ด๋ค. ๋ฐ๋ผ์, (5, 4)์ ์๋ ์ง์ ์นํจ ๊ฑฐ๋ฆฌ๋ 1์ด๋ค.
์ด ๋์์ ์๋ ์นํจ์ง์ ๋ชจ๋ ๊ฐ์ ํ๋์ฐจ์ด์ฆ์ด๋ค. ํ๋ ์ฐจ์ด์ฆ ๋ณธ์ฌ์์๋ ์์ต์ ์ฆ๊ฐ์ํค๊ธฐ ์ํด ์ผ๋ถ ์นํจ์ง์ ํ์ ์ํค๋ ค๊ณ ํ๋ค. ์ค๋ ์ฐ๊ตฌ ๋์ ์ด ๋์์์ ๊ฐ์ฅ ์์ต์ ๋ง์ด ๋ผ ์ ์๋ ์นํจ์ง์ ๊ฐ์๋ ์ต๋ M๊ฐ๋ผ๋ ์ฌ์ค์ ์์๋ด์๋ค.
๋์์ ์๋ ์นํจ์ง ์ค์์ ์ต๋ M๊ฐ๋ฅผ ๊ณ ๋ฅด๊ณ , ๋๋จธ์ง ์นํจ์ง์ ๋ชจ๋ ํ์ ์์ผ์ผ ํ๋ค. ์ด๋ป๊ฒ ๊ณ ๋ฅด๋ฉด, ๋์์ ์นํจ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์๊ฒ ๋ ์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐พ ํ์ด ๋ฐฉ๋ฒ
- ์ง๊ณผ ์นํจ์ง์ ์์น๋ฅผ ์ ์ฅํด์ค๋ค. ๊ฐ๊ฐ home, chicken์ ์ ์ฅํ์๋ค.
final_chicken_distance
๋ผ๋ ๋ณ์๋ฅผ ์์ฑํ๋ค.
์ด ๋ณ์๋ ์ ํ๋ m๊ฐ์ ์นํจ์ง๊ณผ ์ง ๊ฐ์ ์นํจ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ ์ ์ฅํ ๋ณ์์ด๋ค.- ์กฐํฉ์ ์ด์ฉํด, m๊ฐ์ ์นํจ์ง์ ์ ํํ๋ค. ์ฆ, m๊ฐ์ ์นํจ์ง์ ์์น๋ฅผ ๋ถ๋ฌ์จ๋ค.
- ๊ฐ ์ง๋ค์ ๋ํด, ์ ํ๋ m๊ฐ์ ์นํจ์ง๊ณผ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ๋ค. ์ด๋, ๊ฐ์ฅ ์งง์ ๊ฑฐ๋ฆฌ๋ฅผ
chick_dist
๋ผ๋ ๋ณ์์ ์ ์ฅํ๋ค.
์ฆ,chick_dist
๋ผ๋ ๋ณ์๋ ์ ํ๋ m๊ฐ์ ์นํจ์ง๊ณผ ๊ฐ ์ง์ ๋ํ ์ต์ ์นํจ ๊ฑฐ๋ฆฌ์ด๋ค. - ํ ์ง์ ๋ํด
chick_dist
๊ณ์ฐ์ด ๋๋๋ฉด,total_chicken_distance
๋ผ๋ ๋ณ์์chick_dist
๋ฅผ ๋์ ํฉํ๋ค.
์ด์ ๋, ์ ํ๋ m๊ฐ์ ์นํจ์ง์ ๋ํด์ ๋ชจ๋ ์ง๊ณผ์ ์ต์ ์นํจ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด์์ด๋ค. - ์ ํ๋ m๊ฐ์ ์นํจ์ง์ ๋ํด, ์์ ์ ์ธํ
final_chicken_distance
๋ผ๋ ๋ณ์์total_chicken_distance
๋ผ๋ ๊ฐ์ ์ ์ฅํ๋ค. ์ด ๋, ๋ ์์ ๊ฐ์ ์ ์ฅํ๋ค.
์ฆ, ์ด ๊ณผ์ ์ด ๋ชจ๋ ๋๋๋ฉด ์ ์ฒด ์นํจ์ง์ ๋ํด m๊ฐ๋ฅผ ๊ณ ๋ฅด๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์์ ๋ํด ๊ฐ๊ฐ์ total_chicken_distance
๋ฅผ ๊ณ์ฐํ๊ณ , final_chicken_distance
๋ฅผ ์
๋ฐ์ดํธํ๋ฉฐ ์ต์ ์นํจ ๊ฑฐ๋ฆฌ๋ฅผ ๋ง์กฑํ๋ m๊ฐ์ ์นํจ์ง์ ๋ํ ์ต์ ์นํจ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๊ฒ ๋๋ค.
solution ์ฝ๋
import sys
import itertools
sys.stdin = open("input.txt","rt")
n, m = map(int,sys.stdin.readline().split())
home = []
chicken = []
for i in range(n):
temp = list(map(int, sys.stdin.readline().split()))
for j, k in enumerate(temp):
if k == 1: #๊ฐ์ด 1์ธ๊ฒฝ์ฐ๋ ์ง
home.append([i,j])
elif k == 2: #๊ฐ์ด 2์ธ ๊ฒฝ์ฐ๋ ์นํจ์ง
chicken.append([i,j])
final_chicken_distance = 99999 #๊ฐ์ฅ ์ต์ข
์นํจ ๊ฑฐ๋ฆฌ ๊ฐ
for select_chicken in itertools.combinations(chicken,m):
total_chicken_distance = 0 # m๊ฐ์ ์กฐํฉ์ผ๋ก ๊พธ๋ ค์ง ์นํจ์ง๋ค์ ์นํจ ๊ฑฐ๋ฆฌ ํฉ
for h_loc in home:
chick_dist = 99999
for c_loc in select_chicken: # ์ ํ๋ m๊ฐ์ ์นํจ ์ง๋ค๊ณผ, ์ง ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํจ.
distance = abs(h_loc[0] - c_loc[0]) + abs(h_loc[1] - c_loc[1])
chick_dist = chick_dist if distance > chick_dist else distance
total_chicken_distance += chick_dist #๊ฐ ์ง๋ค๊ณผ ์ ํ๋ m๊ฐ์ ์ง๋ค ์ค ์นํจ ๊ฑฐ๋ฆฌ๊ฐ ์ต์์ธ ์นํจ ๊ฑฐ๋ฆฌ๋ฅผ total ์ ๋ํจ.
final_chicken_distance = final_chicken_distance if final_chicken_distance < total_chicken_distance else total_chicken_distance
print(final_chicken_distance)