import java.util.*;
class Solution {
public int solution(int[][] scores) {
int answer = 0;
int max =-1;
int wa=scores[0][0];
int wb=scores[0][1];
Arrays.sort(scores, (a,b)->{
if(a[0]==b[0]) return a[1]-b[1];
else return b[0]-a[0];
});
boolean wanhoAlive= false;
//완호 탈락자인지 체크
for(int[] next:scores){
int a=next[0];
int b=next[1];
//탈락자
if(b<max){
if(a==wa && b==wb) return -1;
continue;
}
if(b>max) max=b;
// 생존자. 완호 점수쌍이면 생존 체크
if (a == wa && b == wb) wanhoAlive = true;
}
//if(!wanhoAlive) return -1;
int rank = 1;
max =-1;
//원호가 통과 됐으면 원호 보다 상위 순위 구하기
for(int[] next:scores){
int a=next[0];
int b=next[1];
if (b < max) continue; // 탈락자 스킵 (핵심 수정)
if(a+b > wa+wb) rank++;
//if(a+b <= wa+wb) continue;
if (b > max) max = b;
}
return rank;
}
}
회고
1.문제 유형
우선 문제를 처음 접근할때 생각보다 단순할거라 판단했다.
하지만 생각보다 예외 조건 , 접근이 까다로웠다.
2차원 배열에 1차원 안 배열을 기준으로 내림차순 , 2차우너 배열을 기준으로 오름차순으로
조건에 맞게 예외처리하는게 굉장히 까다로웠다. 아이디어도 떠올리지 못했다.
그리고 기준이되는 원호 직원의 인사고과 점수를 기준으로 1. 탈락자인지 체크 2.본인보다 높은 고과 체크 후 카운팅
1. 탈락자 체크에서 2차원 배열 구간만을 기준으로 max 값을 갱신을 하며 탈락자를 체크하였다.
ex) 5,3 2,9 1,5 1,3 5,7 3,3
-> 정렬 1차원배열은 내림차순, 2차원은 오름차순으로 정렬
-> 5,3 5,7 3,3 2,9 1,3 1,5 로 정렬
통과 통과 탈락 통과 탈락 탈락
max 3 7 7 9 9 9
2. 본인보다 높은 고과 체크 후 카운팅
위 정렬된 기준에서
탈락자 제외하고 본인의 합산값보다 크면 count++
탈락자는 카운팅하지 않는다!
'기타 > 코딩테스트' 카테고리의 다른 글
| (코테) 프로그래머스_선입 선출 스케줄링 *이진탐색 (0) | 2025.09.05 |
|---|---|
| (코테) 프로그래머스_등산코스 정하기 *다익스트라 (0) | 2025.09.04 |
| (코테) 프로그래머스_스티커 모으기(2) *DP (0) | 2025.09.02 |
| (코테) 프로그래머스_광고 삽입 * 윈도우 슬라이딩 (3) | 2025.08.26 |
| (코테) 프로그래머스_이중우선순위큐 *힙 (4) | 2025.08.25 |