C++ 시험 공부 - CodeGround

Updated:

3번 시험 공부


문제


초등학생인 정우는 시험 기간을 맞아 공부를 시작해야 한다.

정우가 다니는 학교에선 총 N 개의 과목에 대해 시험을 보는데, 시간이 부족한 정우는 그 중 K 개의 과목만을 골라서 공부할 수 있다.
정우는 매우 특이한 학생이라서 어떤 과목을 공부한다면 그 과목에 대해선 무조건 같은 점수를 받게 된다고 한다.

정우는 시험 점수 총합을 최대화하기 위해 K 개의 과목을 골라야 한다.
하지만, 모든 과목을 공부할 시간이 없는 정우는, 당신에게 “최대 합계 점수”를 받을 수 있는 K개의 과목을 골라달라고 한다.
K개 과목을 골랐을 때 정우가 받을 수 있는 “최대 합계 점수”를 구하는 프로그램을 작성하라.

입력


입력 파일에는 여러 테스트 케이스가 포함될 수 있다.
파일의 첫째 줄에 케이스의 개수를 나타내는 자연수 T 가 주어지고, 이후 차례로 T 개 테스트 케이스가 주어진다. (1≤T≤20)
입력의 첫 줄에는 테스트 케이스의 숫자가 주어진다.
각각의 테스트 케이스의 첫째 줄에는 과목의 수 N ( N 은 20만 이하의 자연수 )과 정우가 공부할 수 있는 과목의 수 K가 주어진다.
테스트 케이스의 둘째 줄에는 N 개의 숫자들이 주어진다.
각 숫자는 100이하의 음이 아닌 정수이고, 차례대로 어떤해당하는 과목을 공부했을 때 정우가 받을 수 있는 점수를 의미한다.

1
4 2
20 50 30 30

출력


각 테스트 케이스의 답을 순서대로 표준출력으로 출력하여야 하며, 각 테스트 케이스마다 첫 줄에 “Case #T”를 출력하여야 한다. 이때 T는 케이스의 번호이다.
각 테스트케이스마다 정우가 원하는 결과(K개 과목 총점의 최대값)를 출력한다.

Case #1
80

정답


#include <iostream>
#include <algorithm>
#include <cstdio>
#include <vector>

using namespace std;

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	int T = 0,N  = 0, K = 0;
	cin >> T;
	for (int tc = 0; tc < T; tc++)
	{
		cin >> N >> K;
		vector<int> v;
		v.resize(N);
		for(int i = 0; i < N; i ++)
		{
		    v[i] = 0;   // vector v 초기화
		}

		for (int i = 0; i < N; i++)
		{
			cin >> v[i];
		}

		sort(v.begin(), v.end());

		int sum = 0;
		for (int i = 0; i < K; i++)
		{
			sum += v[N - 1 - i];
		}

		cout << "Case #" << tc + 1 << '\n';
		cout << sum << endl;;
	}
	return 0;
}

Leave a comment