같은 간격으로 늘어선 수열인지 확인하기

자바스크립트 코딩테스트 문제로 progression-check 주제를 연습해보세요. 난이도는 easy이며, 브라우저에서 바로 JavaScript로 풀이를 실행할 수 있습니다.

today easy progression-check 함수명: checkArithmeticStreak 제한 시간: 200ms

숫자 배열이 끝까지 같은 간격으로 변하는지 확인하는 문제입니다.

문제 설명

정수 배열 nums가 주어집니다.

배열의 인접한 두 수의 차이가 처음부터 끝까지 모두 같다면 이 배열을 같은 간격으로 늘어선 수열이라고 하겠습니다.

nums가 이런 조건을 만족하면 true, 아니면 false를 반환하는 checkArithmeticStreak 함수를 작성하세요.

예를 들어 [3, 7, 11, 15]는 매번 +4씩 늘어나므로 true이고, [1, 3, 6, 8]은 차이가 2, 3, 2로 달라지므로 false입니다.

제한사항

  • nums의 길이는 1 이상 100,000 이하입니다.
  • nums의 각 원소는 -1,000,000 이상 1,000,000 이하의 정수입니다.
  • 길이가 1 또는 2인 배열은 항상 true로 봅니다.
  • 차이가 음수이거나 0이어도 모든 간격이 같으면 true입니다.

예시

  • 입력: nums = [3, 7, 11, 15] → 출력: true
  • 입력: nums = [10, 7, 4, 1] → 출력: true
  • 입력: nums = [5, 5, 5, 5] → 출력: true
  • 입력: nums = [1, 3, 6, 8] → 출력: false
  • 입력: nums = [42] → 출력: true

힌트

  • 첫 번째 간격만 먼저 구해 두면 됩니다.
  • 그다음부터는 모든 인접한 두 수의 차이가 그 값과 같은지만 확인하면 됩니다.
  • 길이가 아주 짧은 배열은 바로 답을 낼 수 있습니다.

해설

핵심은 첫 간격을 기준으로 끝까지 일관성만 검사하는 것입니다.

배열 길이가 1 또는 2라면 비교할 간격이 부족하므로 자동으로 true입니다.

그보다 길다면 먼저

  • diff = nums[1] - nums[0]

를 구합니다.

이제 i = 2부터 끝까지 보면서 매번

  • nums[i] - nums[i - 1]

를 계산하고, 이 값이 diff와 다르면 즉시 false를 반환하면 됩니다.

예를 들어 [10, 7, 4, 1]에서는 첫 간격이 -3이고,

  • 7 - 10 = -3
  • 4 - 7 = -3
  • 1 - 4 = -3

로 모두 같으므로 true입니다.

반대로 [1, 3, 6, 8]에서는 첫 간격이 2인데,

  • 3 - 1 = 2
  • 6 - 3 = 3

에서 바로 다르므로 false입니다.

이 방법은 배열을 한 번만 순회하므로 시간 복잡도는 O(n)이고, 추가 공간은 O(1)입니다.

코드 작성

starter code를 바탕으로 함수를 완성한 뒤 예제 테스트를 실행해보세요.

JavaScript 에디터 로딩 중...

커스텀 테스트

함수 인자를 JSON 배열 형태로 입력하세요. 예: [3, 5], [[1, 2, 3]]

아직 실행하지 않았습니다.

실행 결과

아직 실행하지 않았습니다.

예제 테스트를 실행하면 여기에서 결과를 확인할 수 있습니다.

댓글

문제 풀이 아이디어, 질문, 반례를 자유롭게 나눠보세요.