본문 바로가기

CodingTest/Baekjun Online Judge

[ BOJ ] 스타트와 링크

/  제출  1  /

 

from itertools import combinations

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

teamA = list(combinations(range(n), n//2))
teamB = []
for a in teamA:
  b = []
  for i in range(n):
    if i not in a:
      b.append(i)
  teamB.append(tuple(b))
  

diff = 100
for a, b in zip(teamA, teamB):
  levA = 0
  levB = 0
  playerA = list(combinations(a, 2))
  playerB = list(combinations(b, 2))
  for i, j in playerA:
    levA += s[i][j] + s[j][i]
  for i, j in playerB:
    levB += s[i][j] + s[j][i]
  if abs(levA-levB) <= diff:
    diff = abs(levA - levB)
print(diff)

: 풀이 소요 시간 50분

 

: 문제 레벨에 비해 시간이 많이 소요되었습니다.

: 첫 번째 떠올린 아이디어는 조합으로 모든 경우의 수를 뽑아 능력치 순으로 나열시킨 뒤에 중간값 2개를 값 비교하는 것이었습니다. 뭔소리야 싶을만큼 문제와 전혀 다른 풀이였습니다. 한 20분만에 코드는 써내려 갔는데 원하는 정답이 물론 나오지 않았습니다.

: 두 번째 다시 생각했습니다. 일단 팀 후보들을 완전히 만들어주자. 그러고 전부 계산하자. 비효율적인 느낌이 있지만 우선 구현이 먼저다! 라고 생각하고 나온 것이 위의 풀이입니다. 채점에 2-3분이 걸린 것 봐서는 효율적이지 않은 느낌이어서 불안불안해하며 다른 분들 풀이 확인하고 공부해보겠습니다.

'CodingTest > Baekjun Online Judge' 카테고리의 다른 글

[ BOJ / 파이썬] 1926 그림  (0) 2022.07.23
[ BOJ ] 15649 N과 M  (0) 2022.07.23
[ BOJ ] 구슬 탈출 2  (0) 2022.07.19
[ 백준 / BOJ ] 2064 IP주소 * 다시 풀기 *  (0) 2022.07.01
[ 백준 / BOJ ] 나3곱2  (0) 2022.07.01