[프로그래머스] Lv.2 숫자의 표현 JavaScript

Janet·2023년 3월 24일
0

Algorithm

목록 보기
87/314

문제 설명

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

입출력 예 설명

입출력 예#1문제의 예시와 같습니다.


※ 공지 - 2022년 3월 11일 테스트케이스가 추가되었습니다.


문제풀이

💡 문제풀이 과정

  • 연속한 자연수들의 합이 n과 일치하는 경우의 수자연수 n의 약수 중, 홀수인 약수의 개수같다. 이 내용을 안다면 풀이는 더욱 간단하게 되었다. 따라서 답안 1번은 for() 반복문을 통해 자연수 n의 약수를 구하는 식인 n % i == 0을 활용할 수 있고, 그 중 홀수인 약수를 찾아야 하므로, if (n % i == 0 && i % 2 == 1)을 하면, 자연수 n의 약수이면서 동시에 홀수를 찾을 수 있다.
  • 답안 2번의 경우 위의 식을 적용하지 않았고 i + (i + 1) + (i + 2) + … 으로 나가는 식을 구하여야 하므로 for()반복문을 중첩 사용하여 합을 낸다. 그 합이 자연수 n과 같으면 break;하여 빠져나간다. 합이 n보다 커져도 break한다. 이 코드 같은 경우 속도 면에서 아슬아슬하게 테스트 통과가 되므로 답안 1번이 적절하겠다.

✅ 답안 #1

function solution(n) {
  let answer = 0;
  for (let i = 1; i <= n; i++) {
    if (n % i == 0 && i % 2 == 1) answer++;
  }
  return answer;
}

✅ 답안 #2

function solution(n) {
  let answer = 0;
  let sum = 0;

  for (var i = 1; i <= n; i++) {
    for (var j = i; j <= n; j++) {
      sum += j;
      if (sum == n) {
        answer++;
        sum = 0;
        break;
      }
      if (sum > n) {
        sum = 0;
        break;
      }
    }
  }
  return answer;
}
profile
😸

0개의 댓글