본문 바로가기
코딩 테스트/[JS] programmers 코딩 테스트 연습

[Programmers/JS] 숫자의 표현 / 프로그래머스 코딩 테스트 연습

by M개발자 2021. 12. 26.
반응형

숫자의 표현


문제 설명

 

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 result
15 4

코드 해석 및 전체 코드

 

1. 반환할 값의 초깃값 1로 설정

예시를 보면 자기 자신의 수도 연속된 수로 포함하기에 자신의 수를 미리 더한 상태에서 시작 

 

2. for문 n/2만큼 반복

예시에서 7 + 8 = 15처럼, 15 절반의 수인 7은 8과 더했을 때 15를 얻을 수 있지만, 8 이상의 수의 연속된 숫자는 15의 수를 넘기에 n/2만큼만 반복했다. 

 

3. 더해진 값 저장할 변수와 더해질 변수 선언

더해질 값인 i의 초깃값은 k로 잡는다. 처음 수인 1부터 연속된 숫자를 구하고, 다음 반복에선 2부터 연속된 수, ...로 15를 만들 수 있는 수를 구하기에 초깃값을 1부터 시작하였다. 

 

4. sum이 n보다 작을 때까지 반복하여 i 더하기

연속된 숫자의 합이 15이상이면 조건과 불일치해 15보다 작을 때까지만 반복한다.

만약 i가 4이고 sum이 0이라면,

i sum sum < n
4 0 O
5 4 O
6 9 O
7 15 X

i가 7일 때 sum은 15로 while문 반복을 종료한다.

 

5. sum과 i가 같으면 반환값에 1 더함

while문 반복을 마쳤을 때 sum이 15이므로 반환할 변수 answer에 1을 더함

 

 

function solution(n) {
    var answer = 1;
    for (let k = 1; k <= n / 2; k++) {
        let sum = 0;
        let i = k;
        while (sum < n) sum += i++;
        if (sum == n) answer++;
    }
    return answer;
}

github

programmers

 

 

반응형

댓글