프로그래머스 | LV.3 인사고과 - 단순 구현 문풀 (Java)

728x90

⬛ 프로그래머스 | LV.3 인사고과 - 단순 구현 문풀 (Java)

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

 

프로그래머스

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

programmers.co.kr

문제 설명


💚문제 접근 방식

처음에 문제를 잘못 이해했다.
(처음에는 두 점수 모두 내림차순으로 정렬한 뒤 가장 마지막 사람이 무조건 탈락이라고 생각함)
이 경우, [1,4] 가 탈락되어야 하는데, 사실은 1,4 총점은 5이고 이사람의 경우 근무 점수 기준은 가장 낮으나, 동료점수 기준은 가장 높다. 따라서 탈락되면 안됨)

풀이 설명

  • 일단, 앞선 사원보다 두 점수가 모두 낮은 경우가 무조건 탈락이다.
  • 탈락 사원을 따지기 위해서는 근무태도에 대해서는 내림차순 정렬 하더라도, 동료평가 점수는 오름차순 정렬 해두어야 동료평가 점수마저 낮은 사람을 탈락시킬 때 용이하다.
  • 그리고, 탈락자 제외한 상태에서는 원호보다 두 점수 합이 높은 사람에 대해서만 카운팅해주면 된다. 자연스럽게 원호 등수 출력된다.

💚 제출 코드

import java.util.*;

class Sawon implements Comparable<Sawon>{
    int num;
    int a, b;
    Sawon(int num, int a, int b){
        this.num = num;
        this.a = a;
        this.b = b;
    }
    @Override
    public int compareTo(Sawon o){
        if(this.a == o.a){//동점인 경우 
            return this.b - o.b;//동료평가 오름차순
        }
        return o.a - this.a; //기본 근무태도 내림차순
    }
}
class Solution {
    //솔루션 함수 
    public int solution(int[][] scores) {
        int answer = 1;
        //완호 점수 세팅 
        int[] target = scores[0];
        int target_sum = scores[0][0] + scores[0][1];
        
        List<Sawon> list = new ArrayList<>();
        int idx = 1;
        for(int[] x : scores){
            list.add(new Sawon(idx, x[0], x[1]));
            idx++;
        }
        
        Collections.sort(list);//정렬
        
        int max_peer = list.get(0).b;

        for(int i=0; i<list.size(); i++){
            Sawon x = list.get(i);
            //이미 정렬된 상태인데, 동료점수마저 낮을 경우 
            if(x.b < max_peer) {
                if(x.a == target[0] && x.b == target[1]){//그게 완호면
                    return -1;
                }
            }else{
                max_peer = Math.max(max_peer, x.b);//더 큰 값 세팅 
                if(x.a + x.b > target_sum){
                    answer++;
                }
            }   
        }
        return answer;
    }
}

💚 회고

마음이 급하다보니 문제를 대충 이해한 상태로로 코드부터 구현하려고 한다. 어차피 제대로 이해 못하면 다시 처음부터 문제 여러 번 읽으며 고쳐야 하니 시간이 좀 걸리더라도 제대로 이해하고 풀자.

728x90