이번에 itertools를 처음 배웠다. itertools는 자신만의 반복자를 만들기 위해서 사용되는 모듈이다. 즉 무엇인가 반복되는 요소를 쉽게 만들기 위해서 사용한다.
이 문제는 조합을 만들어야 하기 때문에 combinations를 함수에 대해서만 공부했다.
combinations는 조합을 만들어 주는 함수이다.
combinations([1,2,3,4], 2) 를 하면 4개의 수를 2조합으로 만들겠다는 의미다.
따라서 이러한 값을 이용해서 조합을 빠르게 구한다.
나는 조합을 못구해서 얼타다가 결국 고수의 코드를 참고하여 이해했다.
from itertools import combinations
N = int(input())
Nlist = [i for i in range(N)]
Map = []
for _ in range(N):
Map.append(list(map(int,input().split())))
Team =[]
for team in list(combinations(Nlist,N//2)):
Team.append(team)
Min = 1000
for i in range(len(Team)//2):
team = Team[i]
stat_A = 0
for j in range(N//2):
member = team[j]
for k in team:
stat_A += Map[member][k]
team = Team[-i-1]
stat_B = 0
for j in range(N//2):
member = team[j]
for k in team:
stat_B += Map[member][k]
Min = min(Min, abs(stat_A - stat_B))
print(Min)
즉, 결론은 조합을 구하고 싶으면 itertools의 combinations를 사용하면 된다 이말이다!
'알고리즘' 카테고리의 다른 글
백준 1904 풀이 (재귀함수 인척하는 점화식 풀이) (0) | 2021.02.18 |
---|---|
백준 9184 풀이 (재귀함수, 메모제이션, 다이나믹 프로그래밍) (0) | 2021.02.18 |
백준 14888 풀이 (재귀함수, 백트래킹, 연산자 끼워넣기) (0) | 2021.02.16 |
백준 9663 풀이 (백트래킹, 재귀함수) (0) | 2021.02.16 |
백준 15650 풀이 (재귀함수) (0) | 2021.02.15 |