알고리즘/프로그래머스
인사고과
베리영young
2024. 7. 14. 22:00
사용 알고리즘: 구현
사용 언어: java
import java.util.*;
class Solution {
public int solution(int[][] scores) {
//원호의 점수 저장해두기
int[] whScore = {scores[0][0], scores[0][1]};
// order by 근태점수 desc, 동료점수 asc
Arrays.sort(scores, (o1, o2) -> {
if(o1[0] != o2[0])
return o2[0] - o1[0];
return o1[1] - o2[1];
});
// for(int i=0; i<scores.length; i++)
// System.out.println(Arrays.toString(scores[i]));
// 현재까지 최대 동료점수 저장
// ㄴ근태 점수는 어짜피 윗줄보다 클 수 없으므로, 윗줄의 동ㄹ점수 중 가장 큰 점수보다 < 현재의 동료 점수가 더 커야: 인센티브를 받을 수 있음
int maxScore = scores[0][1];
for(int i=1; i<scores.length; i++) {
if (scores[i][1] < maxScore) {
//만약 원호가 인센티브를 못 받게 되면 끝냄
if(scores[i][0]==whScore[0] && scores[i][1]==whScore[1]) {
return -1;
}
//인센티브 못 받음... => 음수로 표시
scores[i][1] = -1;
scores[i][0] = -1;
}
maxScore = Math.max(maxScore, scores[i][1]);
}
//총점 기준 큰 순으로 다시 scores을 정렬
Arrays.sort(scores, (o1, o2) -> (o2[0]+o2[1]) - (o1[0]+o1[1]));
int answer = 1; //1등부터 시작
int target = whScore[0] + whScore[1];
for(int i=0; i<scores.length; i++) {
if(target == scores[i][0]+scores[i][1]) {
break;
}
answer++;
}
return answer;
}
}
요즘 머리가 굳었는지 풀이법이 안 떠올라~~
Arrays도 람다식으로 정렬할 수 있구나!~!