Skip to content

(22 복습) 삼성 SW 역량 테스트 기출 문제 / 백준 / 15686번: 치킨 배달 #146

@sallyy1

Description

@sallyy1

image

  • 조합 함수 구현
### 조합 함수
def combinations(array, r):
    for i in range(len(array)):
        if r == 1:
            yield [array[i]]

        else:
            for next in combinations(array[i+1:], r-1):
                yield [array[i]] + next



# 치킨거리 -> 합 : 도시의 치킨거리

n, m = map(int, input().split())
a = [list(map(int, input().split())) for _ in range(n)]


store_lt = []
for i in range(n):
    for j in range(n):
        if a[i][j] == 2:
            store_lt.append((i, j))


answer = -1
all_case = combinations(store_lt, m)

for case in all_case:
    ####print(case)
    dist_list = []

    # 계산 수행
    for i in range(n):
        for j in range(n):
            if a[i][j] == 1:
                mini = -1

                for (x, y) in case:
                    dist = abs(i - x) + abs(j - y)
                    if mini == -1 or mini > dist:
                        mini = dist

                dist_list.append(mini)

    dist_sum = sum(dist_list)

    if answer == -1 or answer > dist_sum:
        answer = dist_sum



print(answer)


Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions