개발하는 무민

[프로그래머스-Level2] 숫자의 표현_JavaScript 본문

Algorithm/Programmers

[프로그래머스-Level2] 숫자의 표현_JavaScript

무민_ 2022. 5. 30. 13:56

숫자의 표현

문제 설명
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 이하의 자연수 입니다.
입출력 예
n                                  result
15 4

 

풀이

// 주어진 자연수를 연속된 자연수의 합으로 표현하는 방법의 수와 주어진 수의 홀수인 약수 갯수는 같다는 공식을 사용
// 문제의 예시로 들어보자면, 15의 약수는 1, 3, 5 ,15 이고, 홀수는 4개임
// 약수 1 -> 연속하는 1개 자연수의 합으로 표현 가능, 15 = 15
// 약수 3 -> 연속하는 3개 자연수의 합으로 표현 가능, 15를 3으로 나눈 값인 5로 표현 가능하다. 5+5+5 = 15 => 3+4+5 = 15
// 약수 5 -> 연속하는 5개 자연수의 합으로 표현 가능, 15를 5로 나눈 값인 3으로 표현 가능하다. 3+3+3+3+3 = 15 => 1+2+3+4+5 = 15
// 약수 15 -> 모든 홀수(2n+1)는 n과 n+1로 표현 가능

// 이러한 공식에 기반하여 15를 연속된 자연수의 합으로 표현하는 방법의 수(return값)는 15의 홀수인 약수의 갯수 4와 같다.
// 이 공식을 통해 빠른 속도로 실행 가능한 코드를 짤 수 있다.

function solution(n) {
    let answer = 0;
    
    for(let i=0; i<=n; i++){ //입력한 자연수의 값만큼 반복하는 반복문
        if(n%i === 0 && i%2 === 1){ // 입력받은 자연수를 i로 나누어서 해당 값이 0이고(약수), 홀수(i%2)라면
            answer = answer + 1; //방법의 수를 1 증가시킴
        }            
    }

    return answer;
}

주어진 자연수를 연속된 자연수의 합으로 표현하는 방법의 수와 주어진 수의 홀수인 약수 갯수는 같다는 공식을 사용
문제의 예시로 들어보자면, 15의 약수는 1, 3, 5 ,15 이고, 홀수는 4개임
약수 1 -> 연속하는 1개 자연수의 합으로 표현 가능, 15 = 15
약수 3 -> 연속하는 3개 자연수의 합으로 표현 가능, 15를 3으로 나눈 값인 5로 표현 가능하다. 5+5+5 = 15 => 3+4+5 = 15
약수 5 -> 연속하는 5개 자연수의 합으로 표현 가능, 15를 5로 나눈 값인 3으로 표현 가능하다. 3+3+3+3+3 = 15 => 1+2+3+4+5 = 15
약수 15 -> 모든 홀수(2n+1)는 n과 n+1로 표현 가능

이러한 공식에 기반하여 15를 연속된 자연수의 합으로 표현하는 방법의 수(return값)는 15의 홀수인 약수의 갯수 4와 같다.
이 공식을 통해 빠른 속도로 실행 가능한 코드를 짤 수 있다.

 

-> 즉 문제를 빠르게 풀 수 있는 공식을 찾는 것이 중요함

 

참고 : https://velog.io/@feyouhyun0957/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%88%AB%EC%9E%90%EC%9D%98-%ED%91%9C%ED%98%84-JS