Leetcode Java Set Intersection Size At Least Two
업데이트:
문제
코드
class Solution {
public int intersectionSizeTwo(int[][] intervals) {
Arrays.sort(intervals, (a, b) -> a[1] != b[1] ? a[1] - b[1] : b[0] - a[0]);
int start = intervals[0][1] - 1;
int end = intervals[0][1];
int size = 2;
for (int idx = 1; idx < intervals.length; idx++) {
if (intervals[idx][0] > start && intervals[idx][0] <= end) {
start = end;
end = intervals[idx][1];
size++;
} else if (intervals[idx][0] > end) {
start = intervals[idx][1] - 1;
end = intervals[idx][1];
size += 2;
}
}
return size;
}
}
결과
설명
- 정수 구간을 저장한 intervals의 각 구간 별 최소 두 개의 정수를 가지는 가장 작은 집합의 크기를 구하는 문제이다.
- intervals[i] = [starti, endi] 이며, 정수의 시작과 끝의 구간을 나타낸다.
- intervals를 아래의 조건으로 정렬한다.
- 구간의 종료 위치가 동일하지 않은 경우, 종료 위치가 빠른 순서로 정렬한다.
- 구간의 종료 위치가 동일한 경우, 시작 위치가 늦은 순서로 정렬한다.
- 문제 풀이에 필요한 변수를 정의한다.
- start는 이전 시작 위치를 저장할 변수로, intervals의 첫 구간의 시작 위치로 초기화한다.
- end는 이전 종료 위치를 저장할 변수로, intervals의 첫 구간의 종료 위치로 초기화한다.
- size는 가장 작은 집합의 크기를 저장할 변수로, 앞의 두 값이 포함되었으므로 2로 초기화한다.
- 첫 값은 변수 초기화에 사용하였으므로, 1부터 intervals의 길이 미만까지 idx를 증가시키며 아래를 반복한다.
- intervals의 idx번째 구간의 시작 위치가 start 보다 크고, 종료 위치가 end보다 작거나 같으면 아래를 수행한다.
- start에 end를 넣어 시작 위치를 변경한다.
- end에 intervals의 idx번째 구간의 종료 위치를 넣어 종료 위치를 변경한다.
- 하나의 겹치는 구간이 발생하므로, size는 1만 증가시킨다.
- 위의 경우가 아니면서 intervals의 idx번째 구간의 시작 위치가 end보다 크면 구간이 겹치지 않으므로 아래를 수행한다.
- start에 intervals의 idx번째 구간의 종료 위치보다 1 작은 값을 넣어준다.
- end에 intervals의 idx번째 구간의 종료 위치를 넣어준다.
- 구간이 겹치는 구간이 없으므로, 이전 구간에 2개의 값을 추가하여 size를 2 증가시킨다.
- intervals의 idx번째 구간의 시작 위치가 start 보다 크고, 종료 위치가 end보다 작거나 같으면 아래를 수행한다.
- 반복이 완료되면 조건을 충족하는 최소 집합의 크기인 size를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기