{2, 0} - 완호
{2, 7} - 1등
{1, 6} - 2등이 아니라 인센티브 제외 대상이다.
그럼 어떻게 인센티브를 받을 수 있는지와 등수를 계산할 때 어떻게 미만의 알고리즘을 사용할 수 있을까?
for (auto& e : scores) {
if (target[0] < e[0] && target[1] < e[1]) {
return -1;
}
if (cmax <= e[1]) {
if (target_sum < e[0] + e[1]) {
ans++;
}
cmax = e[1];
}
}
[[0, 4], [5, 4], [5, 3], [5, 2]]
이러한 데이터가 있을 때 사원을 두 번째 원소로 정렬하지 않으면 원호의 등수는 4등이 아닌 2등이 된다. [5, 4]에서 최댓값인 4로 갱신했기 때문에 그다음부터는 원호보다 큰 점수들이어도 누락된다.#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int solution(vector<vector<int>> scores) {
vector<int> target = scores[0];
int target_sum = target[0] + target[1];
sort(scores.begin(), scores.end(), [](auto& a, auto& b) {
if (a[0] != b[0])
return a[0] > b[0];
return a[1] < b[1];
});
int ans = 1;
int cmax = 0;
for (auto& e : scores) {
if (target[0] < e[0] && target[1] < e[1]) {
return -1;
}
if (cmax <= e[1]) {
if (target_sum < e[0] + e[1]) {
ans++;
}
cmax = e[1];
}
}
return ans;
}
import java.util.*;
class Solution {
public int solution(int[][] scores) {
int[] target = scores[0];
int target_sum = target[0] + target[1];
Arrays.sort(scores, (a, b) -> {
if (a[0] != b[0]) {
return Integer.compare(b[0], a[0]);
}
return Integer.compare(a[1], b[1]);
});
int ans = 1;
int cmax = 0;
for (int[] e : scores) {
if (target[0] < e[0] && target[1] < e[1]) {
return -1;
}
if (cmax <= e[1]) {
if (target_sum < e[0] + e[1]) {
ans++;
}
cmax = e[1];
}
}
return ans;
}
}