본문 바로가기
백준/그리디

[백준] #20044 Project Teams (python)

by 똥먹는낙타 2022. 3. 22.
728x90
반응형

20044번: Project Teams (acmicpc.net)

 

20044번: Project Teams

입력은 표준입력을 사용한다. 입력의 첫 번째 행에는 팀 수를 나타내는 양의 정수 n(1 ≤ n ≤ 5,000)이 주어진다. 그 다음 행에 학생 si 의 코딩 역량 w(si)를 나타내는 2n개의 양의 정수가 공백으로

www.acmicpc.net

문제

코딩 프로젝트 수업을 가르치는 수찬이는 프로젝트 팀을 가능하면 공정하게 구성하려고 한다. 프로젝트 팀 하나는 두 명의 학생으로 구성되는데, 각 학생들의 코딩 역량은 모두 다르다. 각 학생은 한 팀의 팀원이어야 한다. 공정성을 높이기 위해 수찬이는 팀원 코딩 역량의 합을 최대한 일정하게 유지하려고 한다. 학생들이 코딩 역량이 주어졌을 때 수찬이가 팀을 구성하는데 도움이 되는 프로그램을 작성하라.

문제를 간단하게 하기 위해, 학생 수는 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를 출력해야 한다.

입력

입력은 표준입력을 사용한다. 입력의 첫 번째 행에는 팀 수를 나타내는 양의 정수 n(1 ≤ n ≤ 5,000)이 주어진다. 그 다음 행에 학생 si 의 코딩 역량 w(si)를 나타내는 2n개의 양의 정수가 공백으로 분리되어 주어진다 (1 ≤ w(si) ≤ 100,000). 학생들의 코딩 역량은 모두 다르다. 즉, i  j이면 w(si) ≠ w(sj)이다.

출력

출력은 표준출력을 사용한다. 표준출력 한 행에 Sm을 출력한다.

예제 입력 1 복사

2
1 7 5 8

예제 출력 1 복사

9

예제 입력 2 복사

3
1 7 3 5 9 2

예제 출력 2 복사

8

# Code

import sys
input = sys.stdin.readline

n = int(input())
s = list(map(int, input().split()))

s.sort()
k = 2*n
min = s[0] + s[-1]
for i in range(1, n):
    if min > s[i] + s[k-(i+1)]:
        min = s[i] + s[k-(i+1)]

print(min)

# Comment

원래 골드 문제 풀어야되는데.. 새벽이다보니 쉬운 거 하고 싶어서.. 실버4 .. 풀었다... (양심고백)


팀별 코딩역량의 합의 최솟값이 최대가 되도록 만들어줘야 하는 간단한 문제이다.
코딩역량 input 값들을 받아 오름차순 정렬한 뒤, 맨 앞의 값과 맨 뒤의 값을 더한 것을 min 초기값으로 설정해준다.
그리고 for문을 통해 len(s)//2 만큼 (= 2*n) i를 증가시키면서 앞의 값과 뒤의 값을 더해준다. 
이때, 그 더한 값이 현재의 min 값보다 작다면 min값을 해당 값으로 대체해준다. 

마지막으로 min 값을 출력해주면 그게 답이 된다.  

728x90
반응형

'백준 > 그리디' 카테고리의 다른 글

[백준] #1092 배 (python)  (0) 2022.03.24
[백준] #2212 센서 (python)  (0) 2022.03.22
[백준] #13164 행복 유치원 (python)  (0) 2022.03.17
[백준] #11000 강의실배정 (python)  (0) 2022.03.17
[백준] #21314 민겸 수 (python)  (0) 2022.03.16

댓글