Problem Solving/BOJ & Programmers

[BOJ] 15686๋ฒˆ: ์น˜ํ‚จ ๋ฐฐ๋‹ฌ

geum 2024. 1. 16. 09:40

๋ฌธ์ œ

ํฌ๊ธฐ๊ฐ€ N×N์ธ ๋„์‹œ๊ฐ€ ์žˆ๋‹ค. ๋„์‹œ๋Š” 1×1ํฌ๊ธฐ์˜ ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ๋„์‹œ์˜ ๊ฐ ์นธ์€ ๋นˆ ์นธ, ์น˜ํ‚จ์ง‘, ์ง‘ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ๋„์‹œ์˜ ์นธ์€ (r, c)์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚ด๊ณ , rํ–‰ c์—ด ๋˜๋Š” ์œ„์—์„œ๋ถ€ํ„ฐ r๋ฒˆ์งธ ์นธ, ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ c๋ฒˆ์งธ ์นธ์„ ์˜๋ฏธํ•œ๋‹ค. r๊ณผ c๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.

 

์ด ๋„์‹œ์— ์‚ฌ๋Š” ์‚ฌ๋žŒ๋“ค์€ ์น˜ํ‚จ์„ ๋งค์šฐ ์ข‹์•„ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ์‚ฌ๋žŒ๋“ค์€ "์น˜ํ‚จ ๊ฑฐ๋ฆฌ"๋ผ๋Š” ๋ง์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ์น˜ํ‚จ ๊ฑฐ๋ฆฌ๋Š” ์ง‘๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์น˜ํ‚จ์ง‘ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ์ด๋‹ค. ์ฆ‰, ์น˜ํ‚จ ๊ฑฐ๋ฆฌ๋Š” ์ง‘์„ ๊ธฐ์ค€์œผ๋กœ ์ •ํ•ด์ง€๋ฉฐ, ๊ฐ๊ฐ์˜ ์ง‘์€ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋„์‹œ์˜ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ๋Š” ๋ชจ๋“  ์ง‘์˜ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ์˜ ํ•ฉ์ด๋‹ค.

 

์ž„์˜์˜ ๋‘ ์นธ (r1, c1)๊ณผ (r2, c2) ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋Š” |r1-r2| + |c1-c2|๋กœ ๊ตฌํ•œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์€ ์ง€๋„๋ฅผ ๊ฐ–๋Š” ๋„์‹œ๋ฅผ ์‚ดํŽด๋ณด์ž.

 

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) ๊ฐ ์ง‘์˜ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ = ์ง‘๊ณผ โญ๊ฐ€์žฅ ๊ฐ€๊นŒ์šดโญ ์น˜ํ‚จ์ง‘์˜ ๊ฑฐ๋ฆฌ

2) ํ์—…์‹œํ‚ค์ง€ ์•Š์„ ์น˜ํ‚จ์ง‘์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜ M๊ฐœ

 

1) ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์ฝ์€ ํ›„์— ๋†“์น˜๊ณ  ์žˆ์—ˆ๋‹ค๋Š” ๊ฑธ ๋ฐ”๋กœ ํŒŒ์•…ํ–ˆ๋Š”๋ฐ 2)๋Š” ์ดํ•ดํ•˜๋Š” ๋ฐ์— ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ๊ฑธ๋ ธ๋‹ค. '์ตœ๋Œ€ M๊ฐœ'๋ผ๋Š” ํ‘œํ˜„์ด ์žˆ์–ด์„œ ์ฒ˜์Œ์—๋Š” ๋‹น์—ฐํžˆ 1๋ถ€ํ„ฐ M๊นŒ์ง€ ๋ชจ๋‘ ํ™•์ธํ•˜๋Š” ๊ฑธ๋กœ ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ฝ”๋“œ ๊ตฌํ˜„์ด๋ž‘ ์†์œผ๋กœ ์“ฐ๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ๋ณด๋‹ค ๋ณด๋‹ˆ๊นŒ ๋ญ”๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ง€๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ๊ทธ ๋•Œ๋ถ€ํ„ฐ '์ œ๋Œ€๋กœ ์ดํ•ดํ•œ ๊ฒŒ ๋งž๋‚˜?' ์‹ถ์€ ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

 

๊ฒฐ๋ก ์ ์œผ๋กœ๋Š” ๋„์‹œ์˜ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ ค๋ฉด M๊ฐœ๋ฅผ ๋‚จ๊ธฐ๋Š” ๊ฒŒ ๋งž๋‹ค. ์ข€ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๋ ค๋ฉด M๊ฐœ๋ฅผ ๋‚จ๊ฒจ์•ผ๋งŒ ํ•œ๋‹ค- ๊ฐ€ ๋˜๊ฒ ๋‹ค.

 

๊ทธ ์ด์œ ๋Š”? ๊ฐ ์ง‘๋งˆ๋‹ค ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์น˜ํ‚จ์ง‘์ด ๋‹ค๋ฅผ ๊ฑฐ๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์ด ๋‚จ๊ธฐ๋Š” ๊ฒŒ ์ข‹๋‹ค! (๋กœ ์ดํ•ดํ–ˆ์Œ)

 

# Gold 5

import sys

from itertools import combinations

N, M = map(int, sys.stdin.readline().split())

city = [list(sys.stdin.readline().split()) for _ in range(N)]

# ๋„์‹œ ๋‚ด ์ง‘๊ณผ ์น˜ํ‚จ์ง‘ ์ขŒํ‘œ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฆฌ์ŠคํŠธ
home = []
chicken_distance = []

city_chicken_distance = 1000000

for row in range(len(city)):
    for col in range(len(city)):
        if city[row][col] == '1':
            home.append([row, col])
        elif city[row][col] == '2':
            chicken_distance.append([row, col])

# ์ „์ฒด ์น˜ํ‚จ์ง‘์—์„œ M๊ฐœ์˜ ์กฐํ•ฉ์„ ๋ฝ‘์•„ ์ง‘๋งˆ๋‹ค ์น˜ํ‚จ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ
for chicken_idx in list(combinations(chicken_distance, M)):
    temp = 0
    
    for home_idx in home:
        distance = 1000000
        
        for i in range(M):
            distance = min(abs(home_idx[0]-chicken_idx[i][0])+abs(home_idx[1]-chicken_idx[i][1]), distance)

        temp += distance
        
    city_chicken_distance = min(temp, city_chicken_distance)

print(city_chicken_distance)