프로그래머스/Level2(JS)

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

KimBY 2023. 5. 16. 19:28
728x90
반응형

숫자의 표현

❓ 문제설명

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

💡 풀이

function solution(n) {
  // 내풀이
  // 자기 자신은 항상 포함
  let answer = 1;
  
  // 등비수열의 합 공식을 사용하여 start 부터 x까지 더해 n 이 나오는 x 값을 리턴
  const findEnd = (n, start) => {
      return (-1 + Math.sqrt(1 + 4 * (2 * n + start * (start - 1)))) / 2
  }
  
  // 1 ~ n/2 까지 findEnd가 정수일 경우 answer 카운팅
  for(let i = 1; i < n / 2; i++) {
      const end = findEnd(n, i)
      if (end === parseInt(end)) answer++;
  }
      
  return answer
}

📝 해설

연속된 자연수의 시작은 n/2보다 작기 때문에(자기 자신 제외) 1 부터 n/2 까지 반복하며 연속된 자연수로 n을 나타낼 수 있는지 확인하여 카운팅 하였다. 이 때, 등차수열의 합 n(a + l) / 2 (a: 첫째항, l: 마지막항, n: 항의 갯수)을 통해 l을 구하는 findEnd 함수를 만들어서 이 값이 자연수인지 확인하여 카운팅 하였다.

 

* n = l - (a - 1) -> 공비가 1일 경우, n을 a와 l에 대한 식으로 변경할 수 있다.

728x90
반응형