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