package org.example.알고리즘.요격시스템;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Objects;
/**
* packageName : org.example.알고리즘.요격시스템
* fileName : Solution
* author : ipeac
* date : 2023-09-25
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-09-25 ipeac 최초 생성
*/
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
//[[4,5],[4,8],[10,14],[11,13],[5,12],[3,7],[1,4]]
int[][] targets = {{4, 5}, {4, 8}, {10, 14}, {11, 13}, {5, 12}, {3, 7}, {1, 4}};
System.out.println(solution.solution(targets));
}
public int solution(int[][] targets) {
Objects.requireNonNull(targets, "targets is null");
int answer = 0;
// 첫번째 원소를 기준으로 오름차순 정렬 수행
int[][] sortedTargets = Arrays.stream(targets)
.sorted(Comparator.comparingInt((int[] o) -> o[1])
.thenComparingInt(o -> o[0]))
.toArray(int[][]::new);
int maxRight = sortedTargets[0][1];
answer++;
for (int[] target : sortedTargets) {
int curLeft = target[0];
int curRight = target[1];
if (maxRight <= curLeft) {
maxRight = curRight;
answer++;
}
}
return answer;
}
}
- 끝점을 기준으로 오름차순을 수행한다.
- 배열을 순회한다.
- 순회한 배열 요소가 (x좌표 1 ~ 4 커버 가능한 미사일) 라면 4이전에 시작하는 미사일은 전부 해당 미사일을 맞추는 레이저로 커버가 가능하다.
- 이런식으로 로직을 진행시키면 쉽게 해결가능
- 물론 중간에 maxRight 값을 갱신해야한다는 것을 잊으면 안된다.
Comparator.comparing 메서드 활용
- Stream API + Comparator 활용으로 가독성있는 정렬이 가능함.
- Person 객체
public class Person { private String name; private int age; // ... 생성자, getter, setter 생략 ... }
- age 속성 기준 오름 차순 + age 동일한 경우 두 번째 정렬 기준
people.sort(Comparator.comparingInt(Person::getAge).thenComparing(Person::getName));
- thenComparing 으로 가독성좋은 정렬조건을 설정이 가능하다.
- 물론 내림차순으로 하려면 comparingInt 나 thenComparing 뒤에
reserved();
를 체이닝 하면 된다.
- Person 객체
Uploaded by N2T
'자바 > 알고리즘' 카테고리의 다른 글
[알고리즘] 친구 (0) | 2023.10.02 |
---|---|
[알고리즘]두 원 사이의 정수쌍 (0) | 2023.10.01 |
[알고리즘] 두 스티커 (0) | 2023.09.24 |
[알고리즘] 생태학 (0) | 2023.09.24 |
[알고리즘] __**주사위 놀이하는 함수**__ (0) | 2023.09.23 |