처음에 나는 두 점수의 곱이 가장 큰 사람을 기준으로 모든 사람을 거를려했다.
그리고 이 방식대로 구현하니 테스트케이스도 60점 수준으로 어느정도 통과하고 다른 부분에서 문제점을 찾고있었는데 ㅜㅜ
근데 조금만 집중해서 반례를 찾아보니 [[1,2], [3,4],[5,6], [4,90000]] 과 같은 케이스가 나오더라..
두 점수의 곱은 [2,90000]가 제일 높지만 이 사원은 걸러져야할 사원인 [3,4]사원을 거르지 못한다 ㅋㅋㅋ
하.. 너무 당연한거였다... 처음에 생각할때 나는 4번을 생각하지 못했다.
그리고나서 질문하기에서 힌트를 얻어가며 풀었다 ㅜ 수학적인 센스를 좀 더 길러야겠다.
이런 센스는 일 할때도 좀 도움이 될 것 같다. (업무 내적으로가 아닌 일머리적으로)
import java.util.*;
class Solution {
public int solution(int[][] scores) {
int answer = 1;
int[] wanho = scores[0];
Arrays.sort(scores, new Comparator<int[]>(){
@Override
public int compare(int[] o1, int[] o2) {
if(o1[0] < o2[0])
return 1;
else if(o1[0] == o2[0]) {
if(o1[1] > o2[1])
return 1;
else
return -1;
}
else return -1;
}
});
int myPoint = wanho[0] + wanho[1];
int peerPoint = 0;
for(int[] score : scores) {
if(score[1] < peerPoint) {
if(wanho[0] == score[0] && wanho[1] == score[1])
return -1;
}
else {
peerPoint = Math.max(score[1], peerPoint);
if(myPoint < score[0] + score[1])
answer++;
}
}
return answer;
}
}