숫자의 표현

Mudi·2023년 1월 27일
0

[JavaScript] Coding Test

목록 보기
21/23
post-thumbnail

숫자의 표현

프로그래머스 숫자의 표현


문제

자연수 n이 주어질 때 연속된 숫자의 합이 n이 되는 방법이 몇가지인지 반환하는 함수를 완성하세요.

예시
n = 15
1+2+3+4+5 = 15
4+5+6 = 15
7+8 = 15
15 = 15

// 4


제한

  • n은 10,000 이하의 자연수 입니다.

접근

n이 되기 위한 연속된 수의 합을 구할때 n/2를 초과하는 수에서 나올 수 없습니다. (자기 자신 제외)
1부터 n/2까지 순회하며 자기 앞의 숫자를 더하다가 n과 같아지면 카운트해줍니다.


풀이

answer 변수 선언

let answer = 1; 

n/2 이상의 수는 순회하지 않기 때문에 자기 자신을 카운트해줍니다.


순회하기

for(let start = 1; start < n/2; start++){
        let end = start;
        let sum = 0;
        while(sum <= n){
          sum += end;
          if(sum === n) answer++;
          end++;
    	}
}
  • 연속된 수의 시작을 의미하는 start는 1부터 n/2까지 순회합니다.
  • 연속된 수를 누적할 sum을 선언해줍니다.
  • end변수는 start와 같은 수에서 시작하고, sum이 n보다 작거나 같아질 때 까지 sum에 누적시켜줍니다.
  • 만약 sum과 n이 같아진다면 answer 카운트를 올려주고 곧 while문은 종료되어 새로운 start에서 while문이 시작됩니다.
  • sum과 n이 같지 않다면 end를 1 올려줍니다.

나의 코드

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

0개의 댓글