정렬
1-1.x축 기준으로 오름차순 정렬
1-2. x축이 같으면 y축 기준으로 오름차순 정렬
텐트만들기
2-1. 첫번째 for문은 하나의 쐐기
2-2. 두번째 for문도 다른하나의 쐐기
2-3. 두 쐐기의 넓이가 0인지 확인
2-4. 세번째 for문은 텐트안의 다른 쐐기가 있는지 비교
문제의 2-4가 핵심인거 같다 처음에는 x축 정렬으로 인해 x축 비교 없이 현재 쐐기를 받은 가장 작은 y축과 가장 큰 y축 안에 다른 쐐기가 없으면 된다고 생각하고 틀렸다ㅜㅜ.
하지만 생각을 해보니 x축도 y축과 같이 비교하여 텐트안에 쐐기가 있는지 확인이 필요했다.
n = 3, param2 = [[0, 0], [0, 2], [4, 3]] 답: 2
n = 4, param2 = [[0, 0], [0, 2], [4, 3], [5, 1]] 답: 5
n = 4, param2 = [[0, 0], [0, 2], [4, 2], [5, 1]] 답: 4
import java.util.*;
class Solution {
public int solution(int n, int[][] data) {
// 1. 정렬
Arrays.sort(data,(o1,o2)->{
if(o1[0]==o2[0]) return o1[1]-o2[1];
return o1[0]-o2[0];
});
int ans = 0;
//2. 사용할수 있는 쐐기 구하기
//2-1. 첫번째 쐐기
for(int i=0; i<data.length; i++) {
//2.2 두번째 쐐기
for(int j=i+1; j<data.length; j++) {
//2-3. 넓이가 0인지 확인
if(data[i][0] == data[j][0] || data[i][1]==data[j][1]) continue;
//2-4. 텐트안에 쐐기가 없는지 확인
boolean check = true;
for(int k=i+1; k<j; k++) {
if((data[i][0]<data[k][0] &&
data[k][0] <data[j][0]) &&
Math.min(data[i][1], data[j][1])< data[k][1] &&
Math.max(data[i][1], data[j][1]) > data[k][1]) {
check= false;
break;
}
}
if(check) {
ans++;
}
}
}
return ans;
}
정보에 감사드립니다.