[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/152995
[풀이]
1. 원호가 인센티브를 받지 못하는 경우 -1을 반환한다.
2. 근무태도에 대해 내림차순 정렬 후 0~i-1 의 사원에 대해서 인센티브를 받지 못하는 사원을 걸러낸다. i번째 사원은 이미 0~i-1 번째 사원보다 근무태도 점수가 낮거나 같다. 근무태도 점수가 낮은데 동료평가 점수도 낮다면 인센티브를 받지 못하므로 제외하고, 그렇지 않은 경우만 map에 넣어준다.
3. 총점 순으로 내림차순 정렬한 후 원호와 점수가 같아지기 전까지 answer++ 해준다.
* 25번 테케에서 시간초과가 발생함. 수정 필요.
[코드]
import java.util.*;
class Solution {
public int solution(int[][] scores) {
int answer = 0;
//완호의 석차를 return
int len = scores.length;
for(int i=1; i<len; i++){
if(scores[0][0] < scores[i][0] && scores[0][1] < scores[i][1]){
return -1;
}
}
List<Employee> list = new ArrayList<>();
for(int i=0; i<len; i++){
list.add(new Employee(i, scores[i][0], scores[i][1]));
}
//근무태도 내림차순 정렬
Collections.sort(list, new Comparator<Employee>(){
@Override
public int compare(Employee e1, Employee e2){
return e2.a - e1.a;
}
});
Map<Integer, Integer> map = new HashMap<>();
for(int i=0; i<len; i++){
boolean flag = true;
for(int j=0; j<i; j++){
//동료평가 점수도 낮다면 인센티브 못받음
if(list.get(i).a < list.get(j).a && list.get(i).b < list.get(j).b){
flag = false;
break;
}
}
if(!flag) continue;
else {
map.put(list.get(i).idx, list.get(i).a+list.get(i).b);
}
}
//전체 점수 내림차순으로 정렬
List<Integer> keySet = new ArrayList<>(map.keySet());
keySet.sort((o1, o2) -> map.get(o2).compareTo(map.get(o1)));
for(int k:keySet){
answer++;
if(map.get(k)==map.get(0)){
break;
}
}
return answer;
}
static class Employee{
int idx;
int a, b; //근무태도, 동료평가
Employee(int idx, int a, int b){
this.idx = idx;
this.a = a;
this.b = b;
}
}
}
'알고리즘 공부 및 문제 풀이 > 프로그래머스(PRO)' 카테고리의 다른 글
[pro] 프로그래머스 level3 12920 선입 선출 스케줄링 (Java) - 이분탐색 (0) | 2023.02.14 |
---|---|
[pro] 프로그래머스 level3 87391 공 이동 시뮬레이션 (Java) - 시뮬레이션 (0) | 2023.02.13 |
[pro] 프로그래머스 level3 42628 이중우선순위큐 (Java) - heap (0) | 2023.02.08 |
[pro] 프로그래머스 level3 92345 사라지는 발판 (Java) - DFS (0) | 2023.02.08 |
[pro] 프로그래머스 level4 42891 무지의 먹방 라이브 (Java) - 시뮬레이션 (0) | 2023.02.07 |