[프로그래머스] 숫자의 표현 Lv2

GoGoDev·2022년 1월 1일
0

Programmers Lv.2🌼

목록 보기
3/3

https://programmers.co.kr/learn/courses/30/lessons/12924

나의 코드

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

테스트케이스와 정확성은 통과를 했지만 효율성에서 시간초과로 통과하지 못하였다.
반복문을 2번이나 쓴 것이 원인인 것 같다.

반복문을 줄이는 풀이 (재귀함수)

function solution(n) {
    var answer = 0;
    for(let i = 1; i <= n; i++){
        if(recursion(i, 0, n)) answer++;
    }    
    return answer;
    
    function recursion(firstnum, sum, n) {
        if(sum == n) return true;
        if(sum > n) return false;
        return recursion(firstnum + 1, sum+firstnum, n)
    }
}

문제 해석

숫자의 표현 문제의 키 포인트는 자연수 n을 연속한 자연수들로 표현 하는 방법은 자연수 n의 약수 중 홀수인 약수의 갯수와 같다는 점이다.

function expressions(num) {
    var answer = 0;

  for(var i=1; i<=num; i++) {
    if (num%i == 0 && i%2 == 1)
      answer++
  }
    return answer;
}

자연수 n이 홀수이면 n의 약수는 홀수만 나온다.

profile
🐣차근차근 무럭무럭🐣

0개의 댓글