본문 바로가기
Problem Solving/BOJ

[Python]14889. 스타트와 링크

by 부르르 2019. 4. 22.

https://www.acmicpc.net/problem/14889

 

14889번: 스타트와 링크

예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다.

www.acmicpc.net


 

이 문제는 0*n//2 와 1*n//2 로 이루어진 n 길이의 순열을 만들어서 이중포문에 넣으면 되는 간단한 문제이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
def next_perm(a):
    i = len(a)-1
    while i > 0 and a[i-1>= a[i]:
        i -= 1
    if i <= 0:
        return False
    j = len(a)-1
    while a[i-1>= a[j]:
        j -= 1
    a[i-1], a[j] = a[j], a[i-1]
    j = len(a)-1
    while i < j:
        a[i], a[j] = a[j], a[i]
        i += 1
        j -= 1
    return True
 
def cal_score(a, start, link):
    start_score = link_score = 0
    for i in range(n):
        for j in range(n):
            if i == j:
                continue
            if a[i] == start:
                if a[i] == a[j]:
                    start_score += stat[i][j]
            elif a[i] == link:
                if a[i] == a[j]:
                    link_score += stat[i][j]
    return start_score, link_score
 
= int(input())
stat = [list(map(int, input().split())) for _ in range(n)]
lst = [0]*(n//2)+[1]*(n//2)
answer = 9876543210
 
while True:
    team_start, team_link = cal_score(lst, 01)
    answer = min(abs(team_start-team_link), answer)
    if not next_perm(lst):
        break
 
print(answer)
cs
728x90
반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[Python]12100. 2048 (Easy)  (0) 2019.05.08
[Python]1248. 맞춰봐  (0) 2019.04.22
[Python]17143. 낚시왕  (0) 2019.04.18
[Python]2529. 부등호  (0) 2019.04.16
[Python]17127. 벚꽃이 정보섬에 피어난 이유  (0) 2019.04.14

댓글