[BOJ]14889 스타트와 링크

Jungmin Lee·2021년 3월 16일
0

APS

목록 보기
6/25
post-thumbnail

문제

BOJ 14889 문제 바로가기
문제의 저작권은 백준 온라인 저지에 있습니다.

나의 코드

N=int(input())
my_map=[list(map(int, input().split())) for n in range(N)]

# 팀나누는 함수
def find_team(person,count):
    if count==N//2: # 스타트팀에 반 채우면
        calc()
    else:
        if person<N:
            find_team(person+1,count)
            start_team.append(person)
            find_team(person+1, count+1)
            start_team.pop()

def calc(): # 각 팀의 전력 계산하는 함수
    global abs_min
    start_sum=0
    link_sum=0
    link_team=list(range(N))
    for i in start_team:
        link_team.remove(i)
    for i in range(N//2-1):
        for j in range(i+1, N//2):
            start_sum+=my_map[start_team[i]][start_team[j]]
            start_sum+=my_map[start_team[j]][start_team[i]]
    for i in range(N//2-1):
        for j in range(i+1, N//2):
            link_sum+=my_map[link_team[i]][link_team[j]]
            link_sum+=my_map[link_team[j]][link_team[i]]

    abs_min= min(abs_min,abs(link_sum-start_sum))   # 최소 판별

start_team=[]
abs_min=100*10
find_team(1,0)
start_team.append(0)
find_team(1,1)
start_team.pop(0)
print(abs_min)

크게 어려운 문제는 아니였으나 스타트팀만 찾고 빼면 코드짜기 쉬움

profile
금융 도메인과 개발 지식을 함께 쌓아가는 주니어 개발자입니다😊

0개의 댓글