본문 바로가기
알고리즘 풀이/프로그래머스

[프로그래머스] 인사고과(java)

by char_lie 2024. 4. 9.
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/152995

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

인사고과 문제

태도 점수와 평가 점수를 비교해서 인센티브를 몇 등으로 받을 수 있는지 찾는 문제

 

#사용 알고리즘

정렬

그리디(greedy)

 

📌문제 접근 포인트

1. 태도 점수와 평가 점수를 고려 후, 점수의 합으로 순위를 찾기 위해 우선 태도 점수를 기준으로 내림차순, 평가를 기준으로 오름차순 정렬해주자. 이렇게 정렬하면 태도 점수로 순위가 고정이 되므로 평가 점수만 고려해주면 되는 문제가 된다.

2. 조건에 맞게 완호의 점수가 2가지 모두 낮은 경우가 있다면 -1을 반환하게 해주자.

3. 평가 점수를 기준으로 갱신해주면서, 완호보다 점수가 높을 경우 순위를 1씩 올려주도록 구성하면 된다.
반응형

⚙ 내가 푼 정답 코드

import java.util.*;

class Solution {
    public int solution(int[][] scores) {
        int a = scores[0][0];
        int b = scores[0][1];
        int sum = a + b;
        // 점수를 태도를 기준으로 내림차순, 평가를 기준으로 오름차순 정렬
        Arrays.sort(scores, (x, y) -> x[0] == y[0] ? x[1] - y[1] : y[0] - x[0]);
                
        int temp = 0;
        int rank = 1;
        for (int[] score : scores){
            if (a < score[0] && b < score[1]){ // 완호의 점수가 둘 중 한번이라도 적어지면
                return -1; // -1
            }
            
            // 이미 태도 기준으로 내림차순 되어있기에 평가 점수만 고려하면 된다.
            if (temp <= score[1]){
                temp = score[1]; 
                if(score[0] + score[1] > sum){
                    rank++;
                }
            }
        }
        return rank;
    }
}
반응형

댓글