fullfish 2022. 9. 8. 14:39

코드

function solution(n) {
  let count = 0;
  for (let i = 0; i <= n; i++) {
    let sum = 0;
    for (let j = i + 1; j <= n; j++) {
      sum += j;
      if (sum === n) {
        count++;
        break;
      }
    }
  }
  return count;
}

처음에는 무식하게 이중for문으로 모두 순회를 하였더니

당연하게도 효율성에서 통과를 못했다

 

잘 모르곘어서 힌트를 보니까

2가지를 발견했는데

 

자연수 n을 연속한 자연수의 합으로 표현할 수 있는 개수는 n의 약수중 홀수의 개수와 같다

function solution(n) {
  let count = 0;
  for (let i = 1; i <= n; i++) {
    if (n % i === 0 && i%2 == 1) count++;
  }
  return count;
}

또는

자연수 n을 i로 나눈 나머지가 0이면 count++ 그 후에 n에 i를 뺀다 그리고 count값

function solution(n) {
  let count = 0;
  for (let i = 1; i <= n; i++) {
    if (n % i === 0) count++;
    n -= i;
  }
  return count;
}