Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions merge-intervals/Yiseull.java

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🏷️ 알고리즘 패턴 분석

merge-intervals/Yiseull.java
class Solution {
    public int[][] merge(int[][] intervals) {
        Arrays.sort(intervals, (o1, o2) -> o1[0] - o2[0]);

        int index = 0;
        for (int i = 0; i < intervals.length; i++) {
            if (intervals[index][1] < intervals[i][0]) {
                intervals[++index] = intervals[i];
            } else {
                intervals[index][1] = Math.max(intervals[index][1], intervals[i][1]);
            }
        }

        return Arrays.copyOf(intervals, index + 1);
    }
}
  • 패턴: Two Pointers, Greedy, Sorting
  • 설명: 정렬 후 두 포인터를 이용해 겹치는 구간을 합치는 방식으로 풀이합니다. 앞쪽 구간과 현재 구간의 관계를 판단하여 합치거나 새로운 구간으로 이동합니다.

📊 시간/공간 복잡도 분석

복잡도
Time O(n log n)
Space O(1)

피드백: 구간들을 시작점 기준으로 정렬한 뒤 같은 구간끼리 합치고, 새로운 끝점을 갱신하는 방식으로 선형 순회로 병합을 수행합니다.

개선 제안: 현재 구현이 적절해 보입니다.

💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!

Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
class Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals, (o1, o2) -> o1[0] - o2[0]);

int index = 0;
for (int i = 0; i < intervals.length; i++) {
if (intervals[index][1] < intervals[i][0]) {
intervals[++index] = intervals[i];
} else {
intervals[index][1] = Math.max(intervals[index][1], intervals[i][1]);
}
}

return Arrays.copyOf(intervals, index + 1);
}
}
Loading