문제
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeUtVakTMDFAVH
설계
재료의 개수(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}')
'PS (Problem Solving) > SW Expert Academy' 카테고리의 다른 글
[SWEA] 1859. 백만 장자 프로젝트 - 파이썬 (0) | 2023.01.17 |
---|---|
[SWEA] 5648. 모의 SW 역량테스트 - 원자 소멸 시뮬레이션 (0) | 2022.04.12 |
[SWEA] 4008. 모의 SW 역량테스트 - 숫자 만들기 (0) | 2022.04.07 |
[SWEA] 1952. 모의 SW 역량테스트 - 수영장 (0) | 2022.04.07 |
[SWEA] 6218. [파이썬 프로그래밍 기초(1) 파이썬의 기본 구조와 기초 문법] 6. 흐름과 제어 (0) | 2022.01.05 |