반응형
문제분석
목표: 완호의 인센티브 순위를 구하라
규칙
1. 누군가의 근무태도와 동료평가가 다른사람의 두 요소보다 낮으면 인센티브 제외
2. 1번의 경우가아니라면, 근무와 동료평가점수를 합산해 랭킹을 매김
첫생각
규칙 1번에 의하여 제일먼저 떠오르는 해결방법은사람 2명을골라 비교하는 방법이다.
하지만, 제한사항을 보면 인원수가 10만명이다.(와우.. 어떤 회사가 10만명의 사원을..?)
10만*10만 = 100억이라서 조합을사용하는건 안된다.
{아 근데, 이 문제는 가지치기를 잘 만하면 2차반복문 써도 풀리는거같다..}
즉, 1차반복문으로 해결을해야한다.
규칙1번처럼 사람과 사람마다 두 요소가 모두낮은지 확인해야하며,
2차 반복문을 사용하지 않는 방법은 꽤나 찾기 힘들다.
방법은 근무태도순대로 정렬하는것이다.
근무태도순대로 내림차순으로 정렬하고, 근무태도가 같다면 동료평가를 오름차순 정렬한다.
->이렇게 정렬을하면 다음과같은 효과가 있다.
1. 정렬을 0번부터 탐색하면서 근무태도는 신경을 안써도댐 (이미정렬함)
2. 동료평가만 탐색해도 두 요소가 낮은지 확인할수있다.
이렇게 정렬을한뒤, 동료평가만 체크하여 랭킹을 만들어서
완호의 랭킹을 차등적용하면 성공이다.
근데 이방법은 요소가 딱 2개만 있어야만 가능한방법이다.
전체풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import java.util.*;
class Solution {
public int solution(int[][] scores) {
int answer = 0;
int max=0;
int[] target = scores[0];
Arrays.sort(scores,(a,b)->(a[0]!=b[0]?b[0]-a[0]:a[1]-b[1]));
List<Integer> list = new ArrayList<>();
for(int[] score :scores){
if(score[1]<max){
if(score.equals(target)){
return -1;
}
}else{
list.add(score[0]+score[1]);
max=Math.max(max,score[1]);
}
}
Collections.sort(list,Collections.reverseOrder());
answer = list.indexOf(target[0]+target[1])+1;
return answer;
}
}
|
cs |
반응형
'알고리즘 > 프로그래머스 Level3' 카테고리의 다른 글
[프로그래머스, Java] Level3 : 파괴되지않는 건물 (0) | 2023.01.30 |
---|---|
[프로그래머스,Java] Level3: 표현 가능한 이진트리 (1) | 2023.01.24 |
[프로그래머스,Java] Level3: 억억단을 외우자 (0) | 2022.12.26 |
[프로그래머스, Java] Level3: 징검다리 건너기 (0) | 2022.09.12 |
[프로그래머스 ,Java] Level3: 등산코스 정하기 (0) | 2022.08.29 |