문제 설명

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

문제의 예시와 같습니다.


✍ SOLUTION1

10점이나 추가점수 받은 코드이다😀

const solution = (n) => {
    let result = 0; 
    for(let i = 0; i <= n; i += 1 ) {
        if(n % i === 0 && i % 2 === 1) result ++; // 약수이면서 홀수인 경우
    }
    return result;
}

/*
내가 처음 작성한 코드이다.

1. 홀수 약수의 개수를 카운팅하기 위한 변수 result를 0으로 초기화한다.
2. for문을 사용하여 0부터 시작하여 n까지 모든 정수에 대해 반복문을 실행한다.
3. n % i === 0: i가 n의 약수인지 확인한다. 즉, n을 i로 나누었을 때 나머지가 0이면 i는 n의 약수이다.
4. i % 2 === 1: i가 홀수인지 확인한다. 홀수는 2로 나누었을 때 나머지가 1이다.
만약 i가 n의 약수이면서 동시에 홀수라면, result를 1 증가시킨다.
5. 반복문을 통해 계산된 홀수 약수의 총 개수 result를 반환한다.
*/

✍ SOLUTION2

const solution = n => {
    let result = 0;
    let sum = 0;
    
    for(let i = 1; i <= n; i += 1) {
        for(let j = i; j <= n; j += 1) {
            sum += j;
            
            if(sum === n) {
                result += 1;
                sum = 0;
                break;
            }
            if(sum > n) {
                sum = 0;
                break;
            }
        }
    }
    return result;
}

/*
다른 방식으로도 풀어보았다.


1. 연속된 자연수의 합으로 n을 나타낼 수 있는 방법의 수를 저장할 result를 0으로 초기화한다.
2. 현재 검토 중인 연속된 자연수들의 합을 저장할 sum을 0으로 초기화한다.
3. for문을 이용하여 i를 시작점으로 하는 연속된 자연수들의 합을 계산한다.
4. 내부 for문은 시작점 i부터 n까지의 연속된 자연수들의 합을 계산한다.
5. 현재 자연수 j를 sum에 더한다.
sum이 n과 같다면, 현재의 연속된 수열이 조건을 만족한다.
result += 1;: 방법의 수를 하나 증가시킨 후 sum을 0으로 초기화한다.
break;: 더 이상의 합을 계산할 필요가 없으므로 내부 반복문을 종료한다.
6. sum이 n을 초과한다면, 현재의 수열은 n을 만들 수 없으므로 sum을 0으로 초기화하고 
내부 반복문을 종료한다.
7. 최종적으로 n을 연속된 자연수의 합으로 나타낼 수 있는 방법의 수를 반환한다.
*/

출처 : 프로그래머스 스쿨 | 코딩테스트 연습

0개의 댓글