2022년 2월 20일 일요일 - 오늘은 풀었다!


오늘 올려볼 문제는 1288번 Remove Covered Intervals 이라는 문제이다.


사진을 클릭하면 해당 문제로 이동합니다.

leetcode 문제 사진

오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.

와씨 오늘은 풀어서 다행이다 진짜


입력


사진에서도 볼 수 있듯이 2차원 int 배열 하나가 입력으로 들어온다.



풀이 및 코드


주어진 2차원 int 배열은 범위를 저장하고 있는 배열들을 저장하는 배열이다.

이 범위들 중 완전히 포함되는 범위를 없애고 남아있는 범위들의 개수를 리턴하는 문제이다.

ex) [1, 5]과 [2, 4]가 있다면 [2, 4]는 [1, 5]에 완전히 포함된다.


오늘은 처음부터 정답을 생각해냈다.

먼저 왼쪽 범위는 오름차순, 만약 왼쪽 범위가 같다면 오른쪽 범위는 내림차순으로 정렬을 했다.

이후 맨처음 범위를 저장하는 변수를 만든다.

그리고 for문을 돌면서 저장한 값과 비교를 한다.

만약 저장한 범위에 포함된다면 개수를 하나 줄이고 계속 진행한다.

만약 저장한 범위에 포함되지 않는다면 현재 범위를 저장하고 계속 진행한다.

위 과정이 가능한 이유는 정렬을 했기 때문에 가능하므로 정렬을 해주는 것이 중요하다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int removeCoveredIntervals(int[][] intervals) {
        // 2차원 배열 정렬, 0번째 원소는 오름차순, 1번째 원소는 내림차순
        Arrays.sort(intervals, new Comparator<int[]>() {
            @Override public int compare(int[] o1, int[] o2)
            {
                if(o1[0] == o2[0])
                {
                    return o2[1] - o1[1];
                }
                else
                {
                    return o1[0] - o2[0];
                }
            }
        });

        // result에는 범위들의 개수를 저장해놓는다.
        int result = intervals.length;
        int[] temp = intervals[0];

        for(int i = 1; i < intervals.length; i++)
        {
            int[] now = intervals[i];

            // 저장한 범위에 포함되면 result - 1
            if(temp[0] <= now[0] && now[1] <= temp[1])
            {
                result--;
            }
            // 포함되지 않으면 저장한 범위 업데이트
            else
            {
                temp = now;
            }
        }

        return result;
    }
}



제출 화면

leetcode 문제 맞았습니다


오늘은 되게 오랜만에 오늘의 문제를 푼 것 같았다. 해봤자 3일이긴 하지만 말이다. ㅋㅋㅋㅋㅋ

하여튼 오늘은 문제를 풀어서 다행인 것 같다.


내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.

+ Recent posts