250x250
Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- dfs
- List
- spring boot
- Calendar
- Java
- CSS
- GC로그수집
- 스택
- Union-find
- date
- BFS
- scanner
- html
- Properties
- map
- javascript
- priority_queue
- JPA
- NIO
- alter
- 큐
- 리소스모니터링
- set
- sql
- 힙덤프
- string
- deque
- 스프링부트
- union_find
- math
Archives
- Today
- Total
매일 조금씩
Leet code (Medium) : 452. Minimum Number of Arrows to Burst Balloons - JAVA 본문
알고리즘/Interval
Leet code (Medium) : 452. Minimum Number of Arrows to Burst Balloons - JAVA
mezo 2024. 10. 15. 22:58728x90
반응형
처음에 매우 복잡하게 생각했던 문제다.
그냥 단순히 겹치는 구간이 있는건 하나로 묶인다고 생각하고,
총 몇개의 묶음구간이 있는지 구하는 것과 같다.
그래서 끝점 기준으로 오름차순 정렬한 후, 현재까지의 겹치는 구간의 끝점을 기억하고 진행하는 것이 포인트다.
현재 구간의 시작점이 그 보다 크면 현재 구간부터 새로운 묶음이 시작되어야 한다는 것이다.
추가로, 잊고 있었는데
Arrays.sort(arr, (a,b) -> a[1]-b[1]);
를 쓰면 비교대상 값이 음수인 경우 오버플로가 발생할 수 있어서, 안전하게
Arrays.sort(arr, (a,b) -> Integer.compare(a[1],b[1]));
를 쓰는 것이 좋다.
class Solution {
public int findMinArrowShots(int[][] points) {
int res = 1;
// 끝점기준 오름차순 정렬 (겹치는 부분을 상세히 알아야해서)
Arrays.sort(points, (a,b) -> Integer.compare(a[1], b[1]));
// a[1] - b[1] 는 값 중 하나가 음수면 오버플로가 발생할 수 있어서
// Integer.compare(a[1], b[1]) 를 쓰는 것이 안전하다.
int end = points[0][1];
for(int i = 1; i < points.length; i++){
int nowStart = points[i][0];
int nowEnd = points[i][1];
// 지금까지 구간들의 중복 구간과 겹치지 않는 구간일 때
if(end < nowStart){
end = nowEnd;
res++;
}
}
return res;
}
}
728x90
반응형
'알고리즘 > Interval' 카테고리의 다른 글
Leet code (Medium) : 435. Non-overlapping Intervals - JAVA (0) | 2024.10.15 |
---|---|
Leet code (Medium) : 56. Merge Intervals - JAVA (0) | 2024.10.15 |
Leet code (Medium) : 57. Insert Interval - JAVA (1) | 2024.10.15 |