Leetcode Java Arithmetic Slices

업데이트:

문제

Link

코드

class Solution {

  public int numberOfArithmeticSlices(int[] nums) {
    int number = 0;
    int count = 0;
    for (int idx = 2; idx < nums.length; idx++) {
      if (nums[idx] - nums[idx - 1] == nums[idx - 1] - nums[idx - 2]) {
        count++;
        number += count;
      } else {
        count = 0;
      }
    }
    return number;
  }

}

결과

Link

설명

  1. 주어진 정수 배열인 num을 이용하여 최소 3개 이상의 연속된 숫자의 차이가 동일한 부분 배열을 만들 수 있는 최대 부분 배열의 개수를 산정하는 문제이다.

  2. 문제 풀이에 필요한 변수를 정의한다.
    • number는 최소 3개 이상의 연속된 숫자의 차이가 동일한 부분 배열의 개수를 저장하는 변수로, 0으로 초기화한다.
      • 간단히 [1, 2, 3, 4]의 경우 아래의 예제이다.
    • 첫 번째 수행에 부분 배열인 [1, 2, 3]을 만들 수 있으므로 1개이다.
    • 두 번쨰 수행에 부분 배열인 [2, 3, 4]를 만들 수 있고, 첫 번째 수행에 이어지므로 [1, 2, 3, 4]의 부분 배열도 생성이 가능하므로 2개가 된다.
    • 위의 수행으로 총 3개의 부분 배열을 생성 할 수 있다. - count는 연속된 숫자의 차이가 동일한 경우 만들 수 있는 부분 배열의 개수를 임시 산정하는 변수로, 0으로 초기화한다.
  3. 2부터 nums의 길이만큼 idx를 증가시키며 아래를 수행한다.
    • nums의 현재 위치와 그 전 위치의 값의 차이가 그 전 위치와 그 전의 전 위치의 값의 차이가 동일한 경우 최소 3개 이상의 연속된 숫자의 차이가 동일하므로, count를 증가시키고 number에 count를 더해준다.
    • 그렇지 않은 경우, 연속되지 않으므로 count를 초기화 시킨다.
  4. 반복이 완료되면 최소 3개 이상의 연속된 숫자의 차이가 동일한 부분 배열을 만들 수 있는 최대 부분 배열의 개수인 number를 주어진 문제의 결과로 반환한다.

소스

Sample Code는 여기에서 확인 가능합니다.

댓글남기기