본문 바로가기

Algorithm

SWEA 5209 최소 생산 비용 (python)

반응형

5209. [파이썬 S/W 문제해결 구현] 5일차 - 최소 생산 비용 D3

 

[파이썬 S/W 문제해결 구현] 5일차

2021.04.21 - [Algorithm] - SWEA 5208 전기버스2 (python)

2021.04.21 - [Algorithm] - SWEA 5209 최소 생산 비용 (python)

 

문제

A사는 여러 곳에 공장을 갖고 있다. 봄부터 새로 생산되는 N종의 제품을 N곳의 공장에서 한 곳당 한가지씩 생산하려고 한다.

각 제품의 공장별 생산비용이 주어질 때 전체 제품의 최소 생산 비용을 계산하는 프로그램을 만드시오.

예를 들어 3개의 제품을 생산하려는 경우 각 공장별 생산비용은 다음과 같이 주어진다..

  A B C 공장
1 73 21 21  
2 11 59 40  
3 24 31 83  
제품        

이때 1-C, 2-A, 3-B로 제품별 생산 공장을 정하면 생산 비용이 21+11+31=63으로 최소가 된다.

[입력]

첫 줄에 테스트케이스의 수 T가 주어진다. 1<=T<=50

다음 줄부터 테스트 케이스의 별로 첫 줄에 제품 수 N이 주어지고, 이후 제품당 한 줄 씩 N개의 줄에 걸쳐 공장별 생산비용 Vij가 주어진다. 3<=N<=15, 1<=Vij<=99

[출력]

각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.

풀이과정

  • 이전에 비슷한 문제를 풀었던 적이 있다. 그것보단 조금 쉬웠다. 링크참고
    • y,x 인덱스가 하나도 겹치지 않게 골고루 들어가라는 조건이었다.
    • 이를 위해 y를 idx 로 정하고
    • x는 반복문을 통해서 해결했다.

코드

T = int(input())

# 비용 계산 함수
# 인덱스와 합을 받을 예정
# idx 값은 y값이라고 생각하면 된다.
def cost(idx, total):
    global result
    # 시간초과와 계산 번거로움줄이기 위한 코드
    # 만약 값이 이미 구한 값 초과한다면 종료
    if total >= result:
        return
    # 만약 다 검사를 마쳤다면
    if idx == N:
        # total 값은 결과값 ( 위에서 이미 걸렀기 때문 )
        result = total
        return
    # N만큼 돌면서 x축검사
    for i in range(N):
        # 만약 x의 인덱스가 방문한 적이 없다면
        if not visited[i]:
            # 방문 후 다음 idx값 살펴보고 다시 돌아오는 과정
            visited[i] = 1
            cost(idx+1, total+arr[idx][i])
            visited[i] = 0


for tc in range(1, T+1):
    N = int(input())
    arr = [list(map(int, input().split())) for _ in range(N)]
    visited = [0 for _ in range(N)]
    result = 100 * N
    cost(0, 0)

    print("#{} {}".format(tc, result))

반응형

'Algorithm' 카테고리의 다른 글

BOJ 1946 신입사원 (python) 파이썬  (0) 2021.04.29
BOJ 6064 카잉달력 (python) 파이썬  (0) 2021.04.29
SWEA 5208 전기버스2 (python)  (0) 2021.04.21
SWEA 4836 색칠하기 (python)  (0) 2021.04.21
SWEA 4843 특별한 정렬 (python)  (0) 2021.04.21