Coding test

[프로그래머스] 숫자의 표현 (Lv 2) - javascript

Jiwoo 2022. 5. 19. 16:46

📝 문제

Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.
 

  • 1 + 2 + 3 + 4 + 5 = 15
  • 4 + 5 + 6 = 15
  • 7 + 8 = 15
  • 15 = 15
     

자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.
 

  • 제한사항
    n은 10,000 이하의 자연수 입니다.
     

🔑 풀이

1차 풀이

function solution(n) {

    let answer = 0;

    for(let i = 1; i <= n; i++) {

        let sum = i;
        let j = i + 1;

        while (sum < n) {
            sum += j;
            j++;
        }

        if(sum === n) answer++;
    }

    return answer;
}

 
정확도 테스트를 통과했으나, 효율성 테스트에서 3개를 통과하지 못했다.
더 나은 효율성을 위해 while문을 for문으로 바꾸고, 변수 선언을 포함해줬다.
 

2차 풀이

function solution(n) {

    let answer = 0;

    for(let i = 1; i <= n; i++) {

        let sum = i;

        for(let j = i+1; sum < n; j++) {
            sum += j;
        }

        if(sum === n) answer++;
    }
    return answer;
}

 
훨씬 간결한 풀이가 완성되었다.
Lv 2 부터는 동작한다고 무조건 통과가 아니라, 간결하게 줄여서 효율성도 신경써야한다.
아무 생각없이 썼던 변수 선언과 while문을 조금만 수정하면 for문으로 묶을 수 있었다.
그 과정에서 배우는 것이 많기 때문에 코드를 줄여보는 경험은 필수적이라고 생각한다.
 

  • 정확도 테스트 결과

 

  • 효율성 테스트 결과

 

3차 풀이

function solution(n) {
    
    let answer = 1;
    
    for(let i = 1; i <= n/2; i++) {
        let temp = n;
        let num = i;
        while(temp > 0) {
            temp -= num ++;
            if(!temp) answer ++;
        }
    }
    
    return answer;
}