728x90
⬛ 프로그래머스 | LV.3 인사고과 - 단순 구현 문풀 (Java)
https://school.programmers.co.kr/learn/courses/30/lessons/152995
💚문제 접근 방식
처음에 문제를 잘못 이해했다.
(처음에는 두 점수 모두 내림차순으로 정렬한 뒤 가장 마지막 사람이 무조건 탈락이라고 생각함)
이 경우, [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
'코딩 테스트 [준비] > [문풀] 프로그래머스_문풀_조지기' 카테고리의 다른 글
프로그래머스 | LV.2 혼자 놀기의 달인 - DFS 문풀 (Java) (20) | 2024.02.28 |
---|---|
프로그래머스 | LV.1 공원 산책 - 단순 구현 문풀 (Java) (26) | 2024.02.28 |
프로그래머스(카카오) | LV.2 양궁대회 - DFS, 완탐 문풀 (Java) (17) | 2024.02.25 |
프로그래머스 | LV.2 우박수열 정적분 - 단순 구현 문풀 (Java) (16) | 2024.02.25 |
프로그래머스 | LV.1 달리기 경주 - HashMap 단순 구현 문풀 (Java) (14) | 2024.02.25 |