스터디/99클럽 코테 스터디 TIL

99클럽 코테 스터디 30일차 Find Right Interval

Been 2024. 8. 21. 09:15

📝 문제

https://leetcode.com/problems/find-right-interval/description/

💦 풀이 실패

import java.util.*;

public class Solution {
    public int[] findRightInterval(int[][] intervals) {
        int n = intervals.length;
        
        // (start, index) 형태로 정렬하기 위해 start와 index를 저장하는 배열을 생성
        int[][] startPoints = new int[n][2];
        for (int i = 0; i < n; i++) {
            startPoints[i][0] = intervals[i][0];
            startPoints[i][1] = i;
        }
        
        // 시작점을 기준으로 정렬
        Arrays.sort(startPoints, Comparator.comparingInt(a -> a[0]));
        
        // 결과를 저장할 배열 초기화
        int[] result = new int[n];
        
        // 각 구간의 우측 구간을 찾기
        for (int i = 0; i < n; i++) {
            int end = intervals[i][1];
            
            // 이진 탐색으로 start >= end인 첫 번째 구간을 찾음
            int left = 0, right = n;
            while (left < right) {
                int mid = left + (right - left) / 2;
                if (startPoints[mid][0] >= end) {
                    right = mid;
                } else {
                    left = mid + 1;
                }
            }
            
            // 찾은 구간의 인덱스를 저장하거나, 없다면 -1 저장
            if (left < n) {
                result[i] = startPoints[left][1];
            } else {
                result[i] = -1;
            }
        }
        
        return result;
    }
}