[Python] G5_15686_์น˜ํ‚จ ๋ฐฐ๋‹ฌ ๐Ÿ—

Sangho Hanยท2023๋…„ 7์›” 12์ผ
0
post-thumbnail

https://www.acmicpc.net/problem/15686

๋ฌธ์ œ

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

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N(2 โ‰ค N โ‰ค 50)๊ณผ M(1 โ‰ค M โ‰ค 13)์ด ์ฃผ์–ด์ง„๋‹ค.

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋„์‹œ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

๋„์‹œ์˜ ์ •๋ณด๋Š” 0, 1, 2๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , 0์€ ๋นˆ ์นธ, 1์€ ์ง‘, 2๋Š” ์น˜ํ‚จ์ง‘์„ ์˜๋ฏธํ•œ๋‹ค. ์ง‘์˜ ๊ฐœ์ˆ˜๋Š” 2N๊ฐœ๋ฅผ ๋„˜์ง€ ์•Š์œผ๋ฉฐ, ์ ์–ด๋„ 1๊ฐœ๋Š” ์กด์žฌํ•œ๋‹ค. ์น˜ํ‚จ์ง‘์˜ ๊ฐœ์ˆ˜๋Š” M๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 13๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ํ์—…์‹œํ‚ค์ง€ ์•Š์„ ์น˜ํ‚จ์ง‘์„ ์ตœ๋Œ€ M๊ฐœ๋ฅผ ๊ณจ๋ž์„ ๋•Œ, ๋„์‹œ์˜ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ

์กฐ๊ฑด

  • ์‹œ๊ฐ„ ์ œํ•œ: 1์ดˆ
  • ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ: 512MB

์ฝ”๋“œ

from itertools import combinations
import sys
input = sys.stdin.readline
# ์ž…๋ ฅ
N,M = map(int,input().split())
graph = [list(map(int,input().split())) for _ in range(N)]
ck = []
home = []
# ์น˜ํ‚จ์ง‘๊ณผ ์ง‘์˜ ์œ„์น˜ ์ฐพ๊ธฐ
for i in range(N):
    for j in range(N):
        if graph[i][j] == 1:
            home.append((i,j))
        elif graph[i][j] == 2:
            ck.append((i,j))
# M๊ฐœ์˜ ์น˜ํ‚จ์ง‘ ์กฐํ•ฉ
result = sys.maxsize
for comb in combinations(ck,M): # ๋ชจ๋“  ์กฐํ•ฉ์„ ํƒ์ƒ‰
    city_chicken = 0            # ๋„์‹œ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ
    for h in home: # ๊ฐ ์ง‘๋ณ„๋กœ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์น˜ํ‚จ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์•„ ํ•ฉํ•จ
        shortest_ck = sys.maxsize # ๊ฐ ์ง‘๋งˆ๋‹ค ์น˜ํ‚จ ๊ฑฐ๋ฆฌ
        for c in comb:
            shortest_ck = min(shortest_ck, abs(h[0]-c[0])+abs(h[1]-c[1]))
        city_chicken += shortest_ck
    result = min(result,city_chicken)
# ์ถœ๋ ฅ
print(result)

๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์น˜ํ‚จ์ง‘๊ณผ ์ง‘์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„ ์ €์žฅํ•ด์ค€๋‹ค.

๋„์‹œ์—์„œ ํ์—…์‹œํ‚ค์ง€ ์•Š๊ณ  ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋Š” ์น˜ํ‚จ์ง‘์˜ ๊ฐœ์ˆ˜๊ฐ€ M๊ฐœ์ด๋ฏ€๋กœ, combinations๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์น˜ํ‚จ์ง‘์—์„œ M๊ฐœ๋ฅผ ๋ฝ‘์•„ ์กฐํ•ฉ์„ ์ƒ์„ฑํ•œ๋‹ค.

  • ์ด๋ฅผ ํ†ตํ•ด์„œ ๋‚˜์˜จ ๋ชจ๋“  ์กฐํ•ฉ์„ ๋น„๊ตํ•˜์—ฌ, ๋„์‹œ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด์ค€๋‹ค.

๊ฐ ์ง‘์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์น˜ํ‚จ์ง‘์„ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•ด์„œ, ์ด์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค.

for h in home: # ๊ฐ ์ง‘๋ณ„๋กœ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์น˜ํ‚จ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์•„ ํ•ฉํ•จ
        shortest_ck = sys.maxsize # ๊ฐ ์ง‘๋งˆ๋‹ค ์น˜ํ‚จ ๊ฑฐ๋ฆฌ
        for c in comb:
            shortest_ck = min(shortest_ck, abs(h[0]-c[0])+abs(h[1]-c[1]))
        city_chicken += shortest_ck
        

์ตœ์ข…์ ์œผ๋กœ ๊ตฌํ•ด์ง„ ๊ฐ ์กฐํ•ฉ๋ณ„ ๋„์‹œ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ์˜ ์ตœ์†Ÿ๊ฐ’์„ result์— ์ €์žฅํ•œ๋‹ค.

result = min(result,city_chicken)

๋А๋‚€ ์  & ๋ฐฐ์šด ์ 

  1. ๋ธŒ๋ฃจํŠธํฌ์Šค๋กœ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉด ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค! 3์ค‘ for๋ฌธ์„ ์“ฐ๋Š” ๊ณผ์ •์—์„œ ํ—ท๊ฐˆ๋ฆฌ๊ธฐ๋Š” ํ–ˆ์ง€๋งŒ ์ž˜ ํ•ด๊ฒฐํ–ˆ๋˜ ๊ธฐ์–ต์ด ๋‚œ๋‹ค.
profile
์•ˆ๋…•ํ•˜์„ธ์š”. ๋น„์ฆˆ๋‹ˆ์Šค๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž, ํ•œ์ƒํ˜ธ์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€

Powered by GraphCDN, the GraphQL CDN