Study/SWEA
5209. [파이썬 S/W 문제해결 구현] 5일차 - 최소 생산 비용
줴림
2025. 4. 27. 20:01
이번 문제는 N종의 제품을 N곳의 공장에서 한 곳당 한 가지씩 생산할 때, 최소 생산 비용이 얼마인지 구하는 문제이다.
T = int(input())
for test_case in range(1, T+1):
N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]
answer = float('inf')
visited = [False for _ in range(N)]
def factory(product, fee): # product: 현재 제품, fee: 생산 비용
global answer
if fee >= answer: # 가지치기
return
if product >= N: # 제품:공장 = 1:1 배정 완료
if answer > fee:
answer = fee
return
for j in range(N):
if not visited[j]:
visited[j] = True
factory(product+1, fee+arr[product][j])
visited[j] = False
factory(0, 0)
print(f"#{test_case} {answer}")
오랜만에 혼자 힘으로 끝까지 다 푼 문제였다. 조금씩 연습하는 게 효과를 보이는걸까!!
항상 함수를 작성할 때, 이건 dfs일지 bfs일지 고민을 했었다. 그러다보니 함수명을 정하는 부분에서부터 막혀서 그 뒤의 진행을 생각하려고만 하면 머리가 복잡해졌었지. 그래서 아예 dfs랑 bfs에 대해 생각하지 않고, 직관적인 함수명을 정해서 어떻게 구현할지에 대해서만 집중했다.
처음 오류가 났던 부분은 for j in range(N): 부분이었다. 처음에 각 공장별 생산 비용을 저장한 리스트가 2차원 리스트니까 당연히 이중 for문을 썼었는데, 테스트케이스를 돌렸을 때의 결과가 이상하게 나와서 다시 살펴본 부분이다.
for i in range(N)를 빼고 factory() 재귀 부분에서 바로 다음 제품에 대해서 생산 비용을 선택하러 넘어갈 수 있도록 해줬다. 그냥 말로 풀려니까 잘 설명이 안 되는군...