[프로그래머스] 인사고과 -JAVA

journey📸·2023년 5월 22일
0

코딩테스트 - JAVA

목록 보기
5/7

🔎 문제 설명

인사고과 문제

💡 풀이 과정

적절하게 정렬하여 비교하는 방식을 잘 생각해야 하는 문제이다.

정렬
먼저, scores배열을 정렬해야 한다.
0번째 점수는 내림차순으로 정렬하는데, 0번째 점수가 동점이라면 1번째 점수는 오름차순으로 정렬하였다.

[3, 2] -> [3, 2] -> [2, 1] -> [2, 2] -> [1, 4]


탐색
탐색할 때
1. 완호가 인센티브를 받을 수 있는지 여부
2. 완호보다 총점 높은 사람 중 인센티브를 받지 못하는 사람 존재 여부
이 두가지를 한 번에 파악해야 한다.

2번 조건을 위해 max 변수를 생성하였다.
max 변수는 1번째 점수의 최대값을 저장해 두는 용도이다.
1번째 값이 max보다 작으면 탈락

총점이 완호보다 높다면 완호보다 높은 등수에 있는 사람이기에 answer 변수 +1

💻 전체 정답 코드

import java.util.*;
class Solution {
    public int solution(int[][] scores) {
        int answer = 0;
        int[] wanho = scores[0];
        int wanhoScore = wanho[0] + wanho[1];
        Arrays.sort(scores, (a, b) -> a[0] == b[0] ? a[1]- b[1] : b[0] - a[0]);

        int max = 0;
        for(int[] s: scores){
            
            if(s[1] < max){
                if(s.equals(wanho)) return -1;
            }else if(s[0] + s[1] > wanhoScore){
                answer++;
                max = Math.max(max, s[1]);
            }

            
        }

        return answer + 1;
    }
}
profile
https://iwntberich.tistory.com/

0개의 댓글