PS (Problem Solving)/SW Expert Academy
[SWEA] 4012. 모의 SW 역량테스트 - 요리사
캐럿노트
2022. 4. 7. 23:14
문제
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeUtVakTMDFAVH
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
설계
재료의 개수(level) 만큼 A, B에 나눠준다.
T = int(input())
for tc in range(1, T+1):
N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]
visit = [0]*N
minV = 999999
def dfs(level, A, B):
global minV
if level == N:
if len(A) == len(B): # 식재료를 모두 나누고 A와 B에 나누어진 식재료의 개수가 같은 경우
sumA, sumB = 0, 0
for i in range(N//2):
for j in range(N//2):
if i == j: # 예외처리: 같은 식재료일 경우
continue
sumA += arr[A[i]][A[j]]
sumB += arr[B[i]][B[j]]
minV = min(minV, abs(sumA-sumB)) # 최소값 갱신
return
dfs(level+1, A+[level], B)
dfs(level+1, A, B+[level])
dfs(0, [], []) # level, A요리, B요리
print(f'#{tc} {minV}')