Algorithm

[๋ฐฑ์ค€] 15686. ์น˜ํ‚จ ๋ฐฐ๋‹ฌ python

๐Ÿณ ๋งํฌ

๋ฐฑ์ค€ 15686๋ฒˆ ์น˜ํ‚จ๋ฐฐ๋‹ฌ

๐Ÿ• ๋ฌธ์ œ

ํฌ๊ธฐ๊ฐ€ 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๊ฐœ๋ฅผ ๊ณ ๋ฅด๊ณ , ๋‚˜๋จธ์ง€ ์น˜ํ‚จ์ง‘์€ ๋ชจ๋‘ ํ์—…์‹œ์ผœ์•ผ ํ•œ๋‹ค. ์–ด๋–ป๊ฒŒ ๊ณ ๋ฅด๋ฉด, ๋„์‹œ์˜ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์ž‘๊ฒŒ ๋ ์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๐Ÿพ ํ’€์ด ๋ฐฉ๋ฒ•

  1. ์ง‘๊ณผ ์น˜ํ‚จ์ง‘์˜ ์œ„์น˜๋ฅผ ์ €์žฅํ•ด์ค€๋‹ค. ๊ฐ๊ฐ home, chicken์— ์ €์žฅํ•˜์˜€๋‹ค.
  2. final_chicken_distance๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    ์ด ๋ณ€์ˆ˜๋Š” ์„ ํƒ๋œ m๊ฐœ์˜ ์น˜ํ‚จ์ง‘๊ณผ ์ง‘ ๊ฐ„์˜ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ €์žฅํ•  ๋ณ€์ˆ˜์ด๋‹ค.
  3. ์กฐํ•ฉ์„ ์ด์šฉํ•ด, m๊ฐœ์˜ ์น˜ํ‚จ์ง‘์„ ์„ ํƒํ•œ๋‹ค. ์ฆ‰, m๊ฐœ์˜ ์น˜ํ‚จ์ง‘์˜ ์œ„์น˜๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
  4. ๊ฐ ์ง‘๋“ค์— ๋Œ€ํ•ด, ์„ ํƒ๋œ m๊ฐœ์˜ ์น˜ํ‚จ์ง‘๊ณผ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ •ํ•œ๋‹ค. ์ด๋•Œ, ๊ฐ€์žฅ ์งง์€ ๊ฑฐ๋ฆฌ๋ฅผ chick_dist๋ผ๋Š” ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค.
    ์ฆ‰, chick_dist๋ผ๋Š” ๋ณ€์ˆ˜๋Š” ์„ ํƒ๋œ m๊ฐœ์˜ ์น˜ํ‚จ์ง‘๊ณผ ๊ฐ ์ง‘์— ๋Œ€ํ•œ ์ตœ์†Œ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ์ด๋‹ค.
  5. ํ•œ ์ง‘์— ๋Œ€ํ•ด chick_dist ๊ณ„์‚ฐ์ด ๋๋‚˜๋ฉด, total_chicken_distance๋ผ๋Š” ๋ณ€์ˆ˜์— chick_dist๋ฅผ ๋ˆ„์ ํ•ฉํ•œ๋‹ค.
    ์ด์œ ๋Š”, ์„ ํƒ๋œ m๊ฐœ์˜ ์น˜ํ‚จ์ง‘์— ๋Œ€ํ•ด์„œ ๋ชจ๋“  ์ง‘๊ณผ์˜ ์ตœ์†Œ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.
  6. ์„ ํƒ๋œ 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)