프로그래머스 Level3 인사고과

한승현·2023년 1월 27일
0

programmers

목록 보기
17/22
  • https://school.programmers.co.kr/learn/courses/30/lessons/152995

  • 문제

    • 완호네 회사는 인사고과에 따라 인센티브를 준다. 인센티브는 근무 태도 점수와 동료 평가 점수를 합한 점수를 기준으로 등수를 나눈다.
    • 한 사원의 근무 태도 점수 및 동료 평가 점수 둘 다 다른 사원의 점수보다 낮다면 인센티브에서 제외된다.
    • 각 사원의 근무 태도 점수와 동료 평가 점수 목록 scores가 주어졌을 때 완호의 석차를 구하시오.
  • 제한사항

    • 1 ≤ scores의 길이 ≤ 100,000
    • scores의 각 행은 한 사원의 근무 태도 점수와 동료 평가 점수를 나타내며 [a, b] 형태입니다.
      • scores[0]은 완호의 점수입니다.
      • 0 ≤ a, b ≤ 100,000
    • 완호가 인센티브를 받지 못하는 경우 -1을 return 합니다.
  • 코드

    import java.util.Arrays;
    
    public class Solution {
    
        public int solution(int[][] scores) {
            int answer = 1;
            int wanhoScore = scores[0][0]+scores[0][1];
            int[] wanho = {scores[0][0],scores[0][1]};
            Arrays.sort(scores,(a,b)->a[0]==b[0] ? a[1]-b[1] : -(a[0]-b[0]));
            int maxValue = Integer.MIN_VALUE;
            for(int i = 0; i < scores.length; i++) {
                if(maxValue < scores[i][1]) {
                    maxValue = scores[i][1];
    
                }else if(maxValue > scores[i][1]) {
                    if(scores[i][0] == wanho[0] && scores[i][1] == wanho[1]) {
                        return -1;
                    }
                    continue;
                }
    
                if(scores[i][0]+scores[i][1] > wanhoScore) {
                    answer++;
                }
            }
    
            return answer;
        }
    
    }
    
  • 풀이

    • scores의 길이가 10만으로 최대한 for문 하나로 해결해야 하는 문제다. 또한 점수의 합을 기준으로 정렬을 해서 완호의 점수가 같을 때까지 몇명나왔는지 세면 된다.
    • 여기서 주의해야할 점은 완호 점수의 합보다 더 큰 사람 중 인센티브를 못 받는 사원인 경우가 있다. 따라서 이런 경우를 체크해야 한다.
      • 이를 체크하기 위해 근무 태도 점수를 우선하여 내림차순으로 정렬하고, 만약 같은경우 동료 평가 점수를 오름차순으로 정렬한다.
      • 근무태도가 낮은 경우는 내림차순이기 때문에 항상 앞의 사람보다 낮을 수 밖에 없다. 따라서 동료 평가 점수만 체크하여 앞에서 나온 점수값보다 더 낮은지 높은지 체크만 하면 되는 것이다.
      • 동료 평가 점수를 오름차순으로 정렬해야 하는 이유
        • 근무 태도 점수가 같은 사람 a,b가 있고, a의 동료 평가 점수가 현재까지 최대값이라고 가정하자. 그렇다면 b의 경우 동료 평가 점수가 내림차순으로 정렬되어 있다면 최대값인 b의 동료 평가점수보다 낮은 사람이니 당연히 인센티브를 못 받는 사원으로 분류가 되지만 근무 태도 점수가 b보다 낮은게 아니기 때문에 사실 인센티브를 받아야 하는 사원인 것이다. 따라서 이런 케이스르 방지하기 위해 오름차순으로 정렬해야 한다.
profile
사람을 만족시켜줄 수 있는 개발자

0개의 댓글