조건
1. 근무태도 점수 + 동료 평가 점수가 주어진다.
2. 다른 임의 사원보다 두 점수가 모두 낮은 경우가 한번이라도 있다면 인센티브를 받을 수 없음
3. 그외에는 두 점수의 합이 높은 순으로 석차를 내어 인센티브 차등지급
4. 두 점수의 합이 동일한 경우 동석차이며, 동석차의 수만큼 다음 석차는 건너 뜀
입력
- 1 ≤ scores의 길이 ≤ 100,000
- scores의 각 행은 한 사원의 근무 태도 점수와 동료 평가 점수를 나타내며 [a, b] 형태
- scores[0]은 완호의 점수
- 0 ≤ a, b ≤ 100,000
문제 해결 프로세스
- a(근무태도 점수)를 기준으로 내림차순
- a의 점수가 같다면 b(동료평가 점수)를 기준으로 오름차순 -> 정렬하게 되면 a는 신경쓰지 않아도 되고, b의 값이 이전보다 작을 경우 인센티브를 받지 못함
- 정렬된 배열을 순차적으로 돌며 b의 가장 큰 값을 탐색하여 인센티브를 받지 못하는 경우를 검색
코드
import java.util.*;
class Solution {
public int solution(int[][] scores) {
int[] wanhoScore = scores[0];
int rank = 1;
int maxScore = 0;
int wTotal = wanhoScore[0] + wanhoScore[1];
Arrays.sort(scores, (a, b) -> a[0] == b[0] ? a[1] - b[1] : b[0] - a[0]); // 배열 정렬
for(int[] score : scores) {
if(maxScore <= score[1]) {
maxScore = score[1];
if(score[0] + score[1] > wTotal) rank++; // 완호 점수보다 큰 경우 랭크 증가
} else {
if(score.equals(wanhoScore)) return -1;
}
}
return rank;
}
}
정리
배열을 어떻게 정렬하고 탐색하느냐가 관건이다. 문제의 정답은 완호의 랭크만 출력하는 것이므로 완호의 정보를 미리 저장해놓고 비교하며 랭크를 찾는다.
'알고리즘 문제풀이' 카테고리의 다른 글
[백준] 14712 넴모넴모 (Java) (1) | 2024.06.30 |
---|---|
[백준] 13460 구슬탈출2 (Java) (1) | 2024.06.30 |
[백준] 12100 2048(Easy) (Java) (0) | 2024.06.26 |
[백준] 1477 휴게소 세우기 (Java) (0) | 2024.06.26 |
[코드트리] 자율주행 자동차(Java) (0) | 2024.06.24 |