728x90
반응형
숫자의 표현
❓ 문제설명
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 이하의 자연수 입니다.
✔ 입출력 예
n | result |
15 | 4 |
💡 풀이
function solution(n) {
// 내풀이
// 자기 자신은 항상 포함
let answer = 1;
// 등비수열의 합 공식을 사용하여 start 부터 x까지 더해 n 이 나오는 x 값을 리턴
const findEnd = (n, start) => {
return (-1 + Math.sqrt(1 + 4 * (2 * n + start * (start - 1)))) / 2
}
// 1 ~ n/2 까지 findEnd가 정수일 경우 answer 카운팅
for(let i = 1; i < n / 2; i++) {
const end = findEnd(n, i)
if (end === parseInt(end)) answer++;
}
return answer
}
📝 해설
연속된 자연수의 시작은 n/2보다 작기 때문에(자기 자신 제외) 1 부터 n/2 까지 반복하며 연속된 자연수로 n을 나타낼 수 있는지 확인하여 카운팅 하였다. 이 때, 등차수열의 합 n(a + l) / 2 (a: 첫째항, l: 마지막항, n: 항의 갯수)을 통해 l을 구하는 findEnd 함수를 만들어서 이 값이 자연수인지 확인하여 카운팅 하였다.
* n = l - (a - 1) -> 공비가 1일 경우, n을 a와 l에 대한 식으로 변경할 수 있다.
728x90
반응형