[BOJ]白俊15686-唐揚げ出前


👩🏻‍💻 質問する



👩🏻‍💻 正しいコード

from itertools import combinations

n, m = map(int, input().split())

chicken = []
house = []

for i in range(n):
  s = input().split()
  for j in range(n):
    if s[j] == '1':
      house.append((i, j))
    elif s[j] == '2':
      chicken.append((i, j))

result = []
for i in list(combinations(chicken, m)):
    r = 0
    for hy, hx in house:
        dist = []
        for cy, cx in i:
            dist.append(abs(hy-cy)+abs(hx-cx))
        r += min(dist)
    result.append(r)

print(min(result))
最初はフライドチキン街が一番多いフライドチキン屋を残すべきだと思っていたのですが、そうすれば間違いかもしれないので探していたらitertoolsの組み合わせで重複しない組み合わせを求めていたのを見つけて、それぞれのケースで中minの価格を出せばいいのです.ライブラリを活用...Pythonを整理します
だから流れ.
  • 家・唐揚げ屋の位置は鶏肉・houseリストに保存しておく
  • for i in list(combinations(chicken, m))フライドチキン屋さんの中m組み合わせがあれば数を繰り返し尋ねることができる
  • フライドチキン店ごとにフライドチキン街を探すdistリストに保存
  • そのうちmin都会のチキン街に値段を加算r
  • 全室からの唐揚げ距離r加えresultリスト
  • このまま、各フライドチキン屋m個セットのフライドチキン距離中minプリント価格
  • 👩🏻‍💻 Remember

    from itertools import combinations
    
    for i in list(combinations(chicken, m)):
    	...
        for cy, cx in i:
        # m개의 치킨집 조합의 각 치킨집 좌표 반복
    しっかりライブラリを背負って積極的に使用!!