본문 바로가기
프로그래머스/JAVA

[level 2] 숫자의 표현

by AsCE_hyunseung 2018. 9. 26.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class NumberExp {
    public int solution(int n) {
        int answer = 1;//자기 자신 표현
        int range=n/2+1;//n/2+1까지가 범위이다.ex)15=7+8
        int sum=0;
 
        for(int i=1;i<range;i++)
        {
            sum=i;
            for(int j=i+1;j<=range;j++)
            {
                sum+=j;
                if(sum>=n)//크거나 같으면 일단 반복문을 break한다.
                    break;
            }
            if(sum==n)//만약 n과 더해진 sum이 같으면 answer을 카운트해준다.
                answer++;
        }
        return answer;
    }
}
 
cs

NumberExp.java


1
2
3
4
5
6
7
8
9
10
11
12
import org.junit.Test;
import static org.junit.Assert.*;
 
public class NumberExpTest {
    NumberExp n= new NumberExp();
 
    @Test
    public void 테스트결과() {
        assertEquals(4,n.solution(15));
        assertEquals(2,n.solution(12));
    }
}
cs

NumberExpTest.java


- 문제 설명

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 이하의 자연수 입니다.


리팩터링을 하다가 느낀건데 확실히 NumberExp.java 안의 반복문 조건에서 i<n/2+1보다 i<range가 훨씬 가독성이 높다는걸 몸소 체험했다.

'프로그래머스 > JAVA' 카테고리의 다른 글

[해시] 완주하지 못한 선수  (2) 2018.10.04
[level 2] JadenCase 만들기  (4) 2018.09.30
[정렬] K번째수  (0) 2018.09.21
[level 2] N개의 최소공배수  (0) 2018.09.13
[level 2] 행렬의 곱셈  (0) 2018.09.11