1) n개의 아이템을 정렬하는 시간 O(nlogn) * m번 수행 = O(mnlogn)
n(1 <= n <= 100) 아이템의 개수 , m(1 <= n <= 1만) 아이템 사용 횟수 이기 때문에 O(mnlogn)은 O(100 100 10) = O(10만) 문제의 시간 제한이 10초 이기 때문에 시간이 남아돕니다.
#include <iostream>
#include <algorithm>
#define max_int 101
using namespace std;
//시간 복잡도: O(mnlogn)
//공간 복잡도: O(n)
//사용한 알고리즘: 그리디, STL sort
//사용한 자료구조: 배열
int t, n, m, result;
// 아이템 정보를 담는 배열
int a[max_int];
int main(){
scanf("%d", &t);
for(int test_case = 1; test_case <=t; test_case++){
// 1. 변수 초기화
result = 0;
// 2. 정보를 입력받는다.
scanf("%d %d", &n, &m);
for(int i=0; i<n; i++){
scanf("%d", &a[i]);
}
// 3. m번 만큼 아이템을 사용합니다.
while(m--){
// 마력 내림차순으로 정렬
sort(a, a+n, greater<int>());
// 제일 마력이 많이 들어있는 아이템을 사용합니다.
result += a[0];
// 마력은 0이 되면 없어집니다.
if(a[0] > 0) a[0]--;
}
// 4. 결과 출력
printf("%d\n", result);
}
}