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 |