csmoon1010의 SW 블로그

[200811] 숫자의 표현 - 연습문제(level2) 본문

Coding Test/프로그래머스

[200811] 숫자의 표현 - 연습문제(level2)

csmoon1010 2020. 8. 11. 23:43

1. 문제 이해

- 자연수 n을 연속한 자연수들로 표현할 수 있는 방법의 가짓수를 return

- ex> 15 = 1+2+3+4+5

            = 4+5+6

            = 7+8

            = 15  [결과 : 4가지]

 

2. 전략

1) 변수 setting

- count : n을 표현할 때 사용하는 자연수의 개수

- start : 자연수 합의 시작값 = 가장 작은 자연수

  → (start) + (start + 1) + ... + (start + count-1)

      = count * start + (0+1+ ... + count-1)

      = count * start + b = n [b로 대체해서 표현]

2) 사용하는 자연수 개수에 따라 표현 가능한지 판단

- 식 : start = (n-b) / (double)count

- count를 1부터 시작하여 start값을 구함

: start가 자연수인 경우만 가짓수에 포함, start가 0보다 큰 동안만 진행

 

3. 참고 사항

1) 나눗셈(실수 결과가 나올 수 있도록)

- 변수 하나를 double로 type 변환을 해준다.

- (double)과 같은 형태로 명시적으로 type 변환

 

4. 코드

class Solution {
    public int solution(int n) {
        int answer = 0; 
        int b = 0; int count = 1;
        while(true){
            double start = (n-b)/(double)count;
            if(start <= 0) break;
            if(start % 1 == 0)   answer++;
            b += count;
            count++;
        }
        return answer;
    }
}
Comments