Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.
자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.
n | result |
---|---|
15 | 4 |
입출력 예#1문제의 예시와 같습니다.
※ 공지 - 2022년 3월 11일 테스트케이스가 추가되었습니다.
💡 문제풀이 과정
연속한 자연수들의 합이 n과 일치하는 경우의 수
는자연수 n의 약수 중, 홀수인 약수의 개수
와 같다. 이 내용을 안다면 풀이는 더욱 간단하게 되었다. 따라서 답안 1번은for()
반복문을 통해 자연수n의 약수
를 구하는 식인n % i == 0
을 활용할 수 있고, 그 중홀수인 약수
를 찾아야 하므로,if (n % i == 0 && i % 2 == 1)
을 하면,자연수 n의 약수이면서 동시에 홀수
를 찾을 수 있다.- 답안 2번의 경우 위의 식을 적용하지 않았고
i + (i + 1) + (i + 2) + …
으로 나가는 식을 구하여야 하므로for()
반복문을 중첩 사용하여 합을 낸다. 그 합이 자연수n
과 같으면break;
하여 빠져나간다. 합이n보다 커져도 break
한다. 이 코드 같은 경우 속도 면에서 아슬아슬하게 테스트 통과가 되므로 답안 1번이 적절하겠다.
✅ 답안 #1
function solution(n) {
let answer = 0;
for (let i = 1; i <= n; i++) {
if (n % i == 0 && i % 2 == 1) answer++;
}
return answer;
}
✅ 답안 #2
function solution(n) {
let answer = 0;
let sum = 0;
for (var i = 1; i <= n; i++) {
for (var j = i; j <= n; j++) {
sum += j;
if (sum == n) {
answer++;
sum = 0;
break;
}
if (sum > n) {
sum = 0;
break;
}
}
}
return answer;
}