PS/그리디 알고리즘[Greedy]

백준 20044 Project Teams(c++)

SeungbeomKim 2022. 9. 18. 02:49
반응형

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

 

20044번: Project Teams

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

www.acmicpc.net

<코드>

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;

int main()
{
    int n;
    cin>>n;
    vector<int>v;
    for(int i=0;i<2*n;i++)
    {
        int num;
        cin>>num;
        v.push_back(num);
    }
    
    sort(v.begin(),v.end());
    
    vector<int>result;

    for(int i=0;i<n;i++)
    {
        result.push_back(v[i]+v[2*n-(i+1)]);
    }
    sort(result.begin(),result.end());
    cout<<result[0];
}

<풀이 과정>

이 문제는 팀의 수(2명이 한 팀)를 입력 받고 각 팀의 합이 차이가 최소면서 팀의 점수가 가장 작은 것을 출력해야 된다.

우선적으로 사람의 역량을 push하고 정렬 시켜준 후,

가장 처음 역량(가장 작은 역량, 인덱스 1씩 늘려줌) + 가장 마지막역량(가장 큰 역량, 인덱스 1씩 줄여줌)의 계산과정을 거치면,

각 팀의 점수의 차가 가장 작게 형성될 것이다.

그리고 팀의 점수를 result 벡터에 각각 push해주고 정렬 시켜준 후, 첫 번째 원소를 출력해주면 끝이다. 

반응형

'PS > 그리디 알고리즘[Greedy]' 카테고리의 다른 글

백준 1173 운동(c++)  (1) 2022.10.06
백준 3135 라디오(c++)  (0) 2022.09.18
백준 2170 선 긋기(c++)  (0) 2022.08.06
백준 1339 단어 수학(c++)  (0) 2022.07.22
백준 1781 컵라면(c++)  (0) 2022.07.21