Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.
1 + 2 + 3 + 4 + 5 = 15
4 + 5 + 6 = 15
7 + 8 = 15
15 = 15
자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.
: 풀이는 맞는데 시간초과로 실패한 것들이 있었다.
function solution(n) {
let count = 0, sum = 0, start = 1, end = 1;
while (start <= n) {
if (sum < n) {
sum += (start++);
} else if (sum > n) {
sum -= (end++);
} else {
count++;
sum += (start++);
sum -= (end++);
}
}
return count + 1;
}
1) sum += (start++);
2) sum -= end;end++;
1번에 2번으로 바꿔줬다고 시간 초과로 실패했던 풀이가 해결이 됐다...
그 이유는
1. 연산자 오버헤드:
sum += (start++);
1. sum에 start의 현재 값을 더한다.
2. 임시 변수를 생성하여 start의 현재 값을 저장한다.
3. start 값을 증가시킨다.
sum += start; start++;
1. sum에 start의 현재 값을 더한다.
2. start 값을 증가시킨다.
function solution(n) {
let count = 1, sum = 0, start = 1, end = 1;
while (start <= n) {
if (sum < n) {
sum += start;
start++
} else if (sum > n) {
sum -= end;
end++
} else {
count++;
sum += (start++);
sum -= (end++);
}
}
return count;
}