알고리즘

[프로그래머스 Lv.2] 숫자의 표현 (JS)

sngynhy 2024. 8. 27. 15:49

문제 설명

Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.

  • 1 + 2 + 3 + 4 + 5 = 15
  • 4 + 5 + 6 = 15
  • 7 + 8 = 15
  • 15 = 15

자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.

제한 사항

  • n은 10,000 이하의 자연수 입니다.

풀이) 등차수열을 이용한 풀이

function solution(n) {
    var answer = 0;
    for (let k=1; k*(k-1)/2 < n; k++) {
        if ((n-k*(k-1)/2)%k === 0) answer++
    }
    return answer;
}

 

n 이하의 자연수 a부터 k개의 연속된 수의 합이 n일 때
a + (a+1) + (a+2) + ... + (a+k-1) = n (a, k, n ∈ N) 성립
결국 첫 항이 a이고 공차가 1인 등차수열의 합과 같음 (등차수열 합 공식 = (a + l) * n / 2)
(a + (a + k - 1)) * k / 2 = n
∴ a = (n - k * (k - 1) / 2) / k

a가 자연수이기 위한 조건
i) n - k * (k - 1) / 2 > 0
=> k * (k - 1) / 2 < n (for문의 조건식)

ii) (n - k * (k - 1) / 2) / k가 자연수
즉, k는 n - k * (k - 1) / 2의 약수여야 함
=> (n - k * (k - 1) / 2) % k === 0을 만족하는 k값