์šฐ๊ทœ์ด์ธ์šฐ์œค
Eager To Learn ๐ŸŒŒ
์šฐ๊ทœ์ด์ธ์šฐ์œค
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿก ํ™ˆ
  • ๐Ÿš€ ๊นƒํ—ˆ๋ธŒ
  • โ›… ํƒœ๊ทธ ํด๋ผ์šฐ๋“œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (217)
    • ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm ๊ธฐ๋ฒ• (1)
      • ๋ฐ”ํ‚น๋… (21)
    • ๋ธ”๋กœ๊ทธ ์ด์‚ฌ (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • ์ž๋ฃŒ๊ตฌ์กฐ (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • ๊ฐœ๋ฐœ์„œ์  (15)
      • ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (1)
      • ์˜ค๋ธŒ์ ํŠธ - ์กฐ์˜ํ˜ธ (7)
      • ์นœ์ ˆํ•œ SQL ํŠœ๋‹ (7)
    • ํšŒ๊ณ  (2)
hELLO ยท Designed By ์ •์ƒ์šฐ.
์šฐ๊ทœ์ด์ธ์šฐ์œค

Eager To Learn ๐ŸŒŒ

๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/PYTHON

[ํŒŒ์ด์ฌ PYTHON] ๋ฐฑ์ค€ 15686๋ฒˆ ใ€์น˜ํ‚จ ๋ฐฐ๋‹ฌใ€‘

2023. 3. 7. 11:51


import sys

#์˜ˆ์ œ ์ž…๋ ฅ
N,M = map(int,sys.stdin.readline().split())
_map = [list(map(int,sys.stdin.readline().split())) for _ in range(N)]

chickens = []
houses = []

# ์ง‘๊ณผ ์น˜ํ‚จ์ง‘ ์ขŒํ‘œ ์ €์žฅ
for row in range(N):
    for col in range(N):
        if _map[row][col] == 2:
            chickens.append([row,col])
        elif _map[row][col] == 1:
            houses.append([row,col])

selected = []
checked = [False]*(len(chickens))
ans = 1e9

def getMinDistance(selected):
    minDistance = 0
    for house in houses:
        houseR = house[0]
        houseC = house[1]
        distance = 1e9
        for storeNum in selected:
            chicken = chickens[storeNum]
            chickenR = chicken[0]
            chickenC = chicken[1]
            distance = min(distance,abs(houseR-chickenR)+abs(houseC-chickenC))
        minDistance +=distance
    return minDistance
    
def bt():
    global ans
    if len(selected) == M:
        ans = min(ans,getMinDistance(selected))
        return
    for i in range(len(chickens)):
        if checked[i] == True:
            continue
        if len(selected)>=1 and selected[-1] > i:
            continue
        selected.append(i)
        checked[i] = True
        bt()
        selected.pop()
        checked[i] = False
bt()
print(ans)

 

๋ฌธ์ œ ์ ‘๊ทผ ๋ฐฉ๋ฒ•

1. ์น˜ํ‚จ ์ง‘ ์ขŒํ‘œ๋ฅผ ๋ฐฐ์—ด(์Šคํƒ)์— ๋„ฃ์–ด๋‘”๋‹ค.

2. ์น˜ํ‚จ ์ง‘์„ M๊ฐœ ์„ ํƒํ•ด์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์กฐํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

    2.1 python์˜ combinations ์‚ฌ์šฉ

    2.2 โœ” ๋ฐฑํŠธ๋ž˜ํ‚น ๋ฐฉ์‹ ์‚ฌ์šฉ 

3. ๋ฐฑํŠธ๋ž˜ํ‚น์œผ๋กœ ๊ตฌํ•œ selected ์Šคํƒ์—๋Š” ์ขŒํ‘œ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ฐฐ์—ด์˜ ์œ„์น˜ ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐ

   -> ex) ์น˜ํ‚จ์ง‘์ด 3๊ฐœ์ด๊ณ  2๊ฐœ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, (์น˜ํ‚จ ์ง‘ ์ขŒํ‘œ = [a,b] [c,d] [e,f]

               selected ์•ˆ์—๋Š” [ [a,b],[c,d] ] / [ [a,b],[e,f] ] / [ [c,d],[e,f] ]  ์ด๋Ÿฐ์‹์œผ๋กœ ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ

               [0,1] [0,2] [1,2] ์ด๋Ÿฐ์‹์œผ๋กœ ์ €์žฅ

4. ๋ฐฑํŠธ๋ž˜ํ‚น ์‹œ, checked ์™€ ์กฐ๊ฑด๋ฌธ์œผ๋กœ ์ค‘๋ณต ์„ ํƒ ์ œ๊ฑฐ

5. ๋ฐฑํŠธ๋ž˜ํ‚น์œผ๋กœ ์น˜ํ‚จ์ง‘ M๊ฐœ๋ฅผ ์„ ํƒํ–ˆ๋‹ค๋ฉด, ๋„์‹œ์˜ ์ตœ์†Œ ์น˜ํ‚จ ๊ฑฐ๋ฆฌ๋ฅผ getMinDistance() ํ•จ์ˆ˜๋กœ ๊ตฌํ•จ

-> ๋กœ์ง ์งค๋•Œ ์€๊ทผํžˆ ํ—ท๊ฐˆ๋ ธ๋Š”๋ฐ, ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ํ’€์–ด์„œ ์ž‘์„ฑํ–ˆ๋”๋‹ˆ ์ž˜ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 

    '๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/PYTHON' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [ํŒŒ์ด์ฌ PYTHON] ๋ฐฑ์ค€ 16236๋ฒˆ ใ€์•„๊ธฐ ์ƒ์–ดใ€‘
    • [ํŒŒ์ด์ฌ PYTHON] ๋ฐฑ์ค€ 14502๋ฒˆ ใ€์—ฐ๊ตฌ์†Œใ€‘
    • [ํŒŒ์ด์ฌ PYTHON] ๋ฐฑ์ค€ 15684๋ฒˆ ใ€์‚ฌ๋‹ค๋ฆฌ ์กฐ์ž‘ใ€‘
    • [ํŒŒ์ด์ฌ PYTHON] ์ฝ”๋“œํฌ์Šค 1426D
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ๊ฐœ๋ฐœ์ž ๊ฟˆ๋‚˜๋ฌด

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”