로직
편하게 점수를 A, B라고 하자.
조건에서는 현재 자신의 점수보다 A, B 둘다 높은 점수가 있다면 탈락이다.
예시 : (7, 1), (6, 2), (3, 2), (3, 1), (2, 2), (2, 1)
1. A를 내림차순으로 정렬한다.
-> 앞에 있을수록 A점은 뒤에보다 높다.
-> 따라서 항상 B점은 앞에보다 높아야한다.
A : 7, 6, 3, 3, 2, 2
B : 1, 2, 2, 1, 2, 1
-> 이렇게 된다면 (3, 2), (3, 1)과 같이 A점이 같은 경우에 (3, 1)의 경우 앞에 있는 수들과 B점을 비교해야 한다.
=> 현재 점수의 A점은 앞에 A보다 작거나 같고 B점은 모른다.
2. A가 같다면 B를 오름차순으로 정렬한다.
A : 7, 6, 3, 3, 2, 2
B : 1, 2, 1, 2, 1, 2
-> 위와 같이 정렬시 현재 점수들은 다른 B점과 비교할 필요가 없어진다.
=> 현재 점수의 A점은 앞에 A보다 작거나 같고 B점은 앞에보다 같거나 크다. => 따라서 조건에 맞다면 탈락되지 않는다.
코드 1
import java.util.*;
class Solution {
public int solution(int[][] scores) {
int[] wonho = scores[0];
Arrays.sort(scores, (x, y) -> x[0] == y[0] ? x[1] - y[1] : y[0] - x[0]);
int answer = 1;
int maxScore = 0;
int sum = wonho[0] + wonho[1];
for (int[] score : scores) {
if (score[1] < maxScore) {
if (score.equals(wonho)){
return -1;
}
}
else{
maxScore = Math.max(maxScore, score[1]);
if (score[0] + score[1] > sum){
answer++;
}
}
}
return answer;
}
}
코드 2
import java.util.*;
class Solution {
public int solution(int[][] scores) {
int answer = 0;
int[] wanho = scores[0];
Arrays.sort(scores, Comparator.comparing((int[] arr) -> -arr[0])
.thenComparing(arr -> arr[1]));
int y_max = scores[0][1];
List<List<Integer>> map = new ArrayList<>();
for(int i=0; i<scores.length; i++){
if(scores[i][1] >= y_max){
y_max = Math.max(y_max, scores[i][1]);
map.add(Arrays.asList(scores[i][0], scores[i][1]));
}
}
Collections.sort(map, Comparator
.comparing(arr -> -(arr.get(0)+arr.get(1))));
int rank = 0;
for(List<Integer> now : map){
rank += 1;
if(now.get(0) == wanho[0] && now.get(1) == wanho[1]){
return rank;
}
}
return -1;
}
}
코드 3
import java.util.*;
class Solution {
public int solution(int[][] scores) {
int rank = 1;
int[] wanho = scores[0];
Arrays.sort(scores, Comparator.comparing((int[] arr) -> -arr[0])
.thenComparing(arr -> arr[1]));
int sum = wanho[0]+wanho[1];
int y_max = scores[0][1];
for(int i=0; i<scores.length; i++){
if(scores[i][1] >= y_max){
y_max = scores[i][1];
if(sum < scores[i][0] + scores[i][1]){
rank += 1;
}
}
else{
if(scores[i] == wanho){
return -1;
}
}
}
return rank;
}
}
'Algorithm > Practice' 카테고리의 다른 글
Programmers - 보행자 천국 with JAVA (0) | 2023.07.23 |
---|---|
Programmers - 광고 삽입 with JAVA (0) | 2023.07.22 |
Programmers - 숫자블록 with JAVA (0) | 2023.07.21 |
Programmers - N-Queen with JAVA (0) | 2023.07.20 |
Programmers - 거스름돈 with JAVA (V) (0) | 2023.07.20 |