프로그래머스 풀이

[javascript]숫자의 표현

Iam_noob 2024. 3. 12. 14: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 이하의 자연수입니다.

 

문제 출처: 프로그래머스

문제 출처: 프로그래머스 (school.programmers.co.k)

 

문제풀이

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

 

반복문 2개를 통해서 연속하는 수의 합을 구할 수 있으며, 더하는 마지막에는 주어진 값과 일치하는지 여부의 확인과 값이 넘었을 경우에 break로 반복문을 빠져나와 i값을 증가시켜 다시 연속하는 수를 더하며 주어진 값과 같은지 확인하는 작업을 반복한다. 주어진 문제가 연속된 자연수의 값이라 풀이가 간단해졌다. 

초기에 if (n === 1) answer++; 을 통해 주어진 값이 1일 경우 조건도 추가했었는데, 이렇게 하면 효율성 테스트에서 실패하게 된다. 

 

i의 반복문은 연속된 숫자를 더하는 첫 번째 시작 숫자가 되는 것이고,

j는 첫번째 시작순부터 다음 숫자를 더하여 주어진 값과 같아지는지 확인하는 작업이다.

 

처음에 설정할 때는 헷갈리는데 

1) 연속된 숫자의 합 = 주어진 숫자

2) 1이 아닌 중간 숫자부터의 연속적인 숫자의 합도 포함

3) 연속된 첫 숫자 = 주어진 숫자 일 때의 개수 추가

 

이렇게 세 개를 고려해서 작성하며 되는 것 같다.

728x90
반응형

'프로그래머스 풀이' 카테고리의 다른 글

[c++] 행렬의 곱셈  (0) 2024.03.20
[javascript]타겟 넘버  (0) 2024.03.13
[javascript]음양 더하기  (0) 2024.03.11
[javascript]짝수와 홀수  (0) 2024.03.08
오랜 기간 보호한 동물(1)  (1) 2024.02.29