티스토리 뷰
728x90
https://www.acmicpc.net/problem/20044
- 문제 :
코딩 프로젝트 수업을 가르치는 수찬이는 프로젝트 팀을 가능하면 공정하게 구성하려고 한다. 프로젝트 팀 하나는 두 명의 학생으로 구성되는데, 각 학생들의 코딩 역량은 모두 다르다. 각 학생은 한 팀의 팀원이어야 한다. 공정성을 높이기 위해 수찬이는 팀원 코딩 역량의 합을 최대한 일정하게 유지하려고 한다. 학생들이 코딩 역량이 주어졌을 때 수찬이가 팀을 구성하는데 도움이 되는 프로그램을 작성하라.
문제를 간단하게 하기 위해, 학생 수는 2n이라 가정하자 (n은 양의 정수). 각 학생 si의 코딩 역량은 양의 정수 w(si)로 나타내면 한 i번째 팀 Gi의 코딩 역량은 w(Gi) = ∑s∈Giw(s)로 나타낼 수 있다. 작성할 프로그램 목적은 Sm = min{w(Gi) | 1 ≤ i ≤ n}이 최대화되도록 n개의 팀 G1, G2, …, Gn 을 구성하고 이때 Sm을 출력하는 것이다.
예를 들어, 학생들의 코딩 역량이 {1, 7, 5, 8}로 주어졌다면 (8, 1), (7, 5)로 2개의 조를 짤 수 있으며 프로그램은 9를 출력해야 한다.
- 풀이 :
오름차순 정렬한 후 양 쪽 끝에서 한 명씩 선택하여 팀을 구성하면 된다.
- 소스코드 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import sys
input = sys.stdin.readline
if __name__ == "__main__":
n = int(input())
s = list(map(int,input().split()))
s.sort()
i = 0
j = len(s)-1
ans = []
while i<j:
ans.append(s[i]+s[j])
i += 1
j -= 1
print(min(ans))
|
cs |
320x100
'Algorithm > Implementation' 카테고리의 다른 글
(Python) - BOJ(21737번) : SMUPC 계산기 (0) | 2022.02.17 |
---|---|
(Python) - BOJ(20937번) : 떡국 (0) | 2022.02.16 |
(Python) - BOJ(19939번) : 박 터뜨리기 (0) | 2022.02.16 |
(Python) - BOJ(12845번) : 모두의 마블 (0) | 2022.02.09 |
(Python) - BOJ(11723번) : 집합 (0) | 2022.02.09 |
댓글
© 2022 WonSeok, All rights reserved