LeetCode 문제 풀이

[LeetCode] 413번 문제를 풀어보았다. (ft. java)

pantrom 2022. 3. 3. 23:28

2022년 03월 03일 목요일 - 오늘은 블랙잭으로 칩 벌어서 적립하고 옴!


오늘 올려볼 문제는 413번 Arithmetic Slices 이라는 문제이다.


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

leetcode 문제 사진

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

아니 차이라고만 하면 당연히 절대값으로 생각하지 왜 이거 때문에 틀리게하냐구!!


입력


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



풀이 및 코드


원소가 3개 이상이면서 붙어있는 원소 2개의 차이가 모두 같은 subarray의 개수를 찾아 리턴하는 문제다.


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

그냥 쭉 가면서 차이를 비교하고 3개 이상이면 나올 수 있는 subarray 개수를 더해주는 식으로 구현했다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int numberOfArithmeticSlices(int[] nums) {
        if(nums.length < 3)
            return 0;

        int result = 0;
        int first = 0, last = -1;
        int diff = nums[0] - nums[1];

        for(int i = 1; i < nums.length - 1; i++)
        {
            if(nums[i] - nums[i + 1] != diff)
            {
                if(last - first + 1 >= 3)
                {
                    result += calc(last - first + 1);
                }

                first = i;
                last = i + 1;
                diff = nums[i] - nums[i + 1];
            }
            else
            {
                last = i + 1;
            }
        }

        if(last - first + 1 >= 3)
        {
            result += calc(last - first + 1);
        }

        return result;
    }

    public int calc(int num)
    {
        int result = 0;
        for(int i = 3; i <= num; i++)
        {
            result += num + 1 - i;
        }
        return result;
    }
}




제출 화면

leetcode 문제 맞았습니다


오늘 문제가 좀 중의적이라서 좀 시행착오를 겪었다.

풀고나서 좀 화가났지만 그래도 뭐 내일 문제는 좋을 것이라 생각하면서 넘어갔다.


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