[프로그래머스] 숫자의 표현 - 자바스크립트

더미벨·2022년 10월 18일
0

💡 문제 설명

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 이하의 자연수 입니다.


💡 입출력 예

nresult
154





✏️ 첫번째 풀이

function solution(n) {
    var answer = 1;
    for(let i=1; i <= n; i++) {
        for(let j=1; j <= n; j++) {
            let sum;
            if(i !== j) {
                sum = ((i+j)*(j-i+1))/2
               if(sum === n) {
                answer++
                break;
            } else if(sum > n) {
                break;
            }
        }
    }
    }
    return answer;
}

내가 처음 생각한 방법은 {(첫번째 숫자 + 마지막 숫자)*갯수}/2 공식을 사용하는 것이었다. 따라서 이중 for문을 돌려 조건식을 만족하는 숫자 두 개(i와 j)를 찾으면 answer에 1씩 추가해 주는 방법으로 코드를 짰다.

그러나 for문을 두번 돌려서 그런지 효율성 테스트를 통과하지 못했다^^ 속도를 줄여보고자 조건식을 만족할 때 break도 걸어보았지만 무쓸모..

✏️ 두번째 풀이

function solution(n) {
    let arr =[];
    for(let i=0; i<=n; i++) {
        if(n%i === 0) {
            arr.push(i)
        }
    }
    const answer = arr.filter(x=>x%2).length
    return answer;
}

연속된 자연수의 합과 관련된 공식을 찾던 도중

주어진 자연수를 연속된 자연수의 합으로 표현하는 방법의 수는 주어진 수의 홀수 약수의 개수와 같다라는 정수론 정리가 있습니다.

라는 글을 발견했다.

처음 알았다...! 하하

약수를 모두 arr에 담아준 뒤 filter함수를 통해 홀수인 약수만 뽑고, length를 이용해 갯수를 구했다.

깔-----끔!!

profile
프론트엔드 개발자👩‍💻

0개의 댓글