베리영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도 람다식으로 정렬할 수 있구나!~!