본문 바로가기

코딩테스트

[프로그래머스] level2. 숫자의 표현 (javascript)

반응형

문제

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) {
    var answer = 0

    for(let i = 1 ; i < n/2;i++){
        for(let j = i,tmp=0 ; j < n+1;j++){
            tmp += j
            if(tmp ===n){
                answer += 1
            } else if(tmp > n){
                break
            }
        }        
    }
    return answer+1;
}

반복문을 돌려서 연속적인 합이 n과 같으면 카운팅 하게 하였다.
마지막으로, 본인은 반드시 포함되므로 , 범위를 줄이는 대신 answer에 +1을 해주는걸로 처리해주었다.

다른이의 풀이

function solution(n) {
    var answer = 0

    for(let i =1;i<=n;i++){
        if (checksum(i,0,n)) answer += 1;
    }
    return answer;
}

function checksum(cur,sum,n){
    if (sum===n) return true;
    if (sum > n ) return false;
    return checksum(cur +1,sum+cur,n);
}

위 처럼 재귀함수로 풀이가 가능하다.

반응형