< 문제 >
- 개요
하나의 자연수를 연속된 자연수의 합으로 어떤 숫자를 표현하는 방법이 여러 가지 존재한다.
들어, 15를 표현하는 방법은
(1+2+3+4+5) // 5개
(4+5+6) //3개
(7+8) //2개
(15) //1개
로 총 4가지가 존재합니다.
숫자를 입력받아 연속된 수로 표현하는 방법을 반환하는 expressions 함수를 완성하세요.
예를 들어 15가 입력된다면 4를 반환해 주면 됩니다.
< 정답풀이 >
public class Test04 {
private static final String result = "결과 : '%s' 를 연속된 자연수의 합으로 표현할 수 있는 경우의 수는 : %s";
public static void main( String[] args ) {
// 시작시간 기록
long startTime = System.currentTimeMillis();
// STEP 1. TEST 데이터 준비
int num = 15;
// STEP 2. 소인수 분해
int count = getExpressions( num );
System.out.println( String.format( result, num, count ) );
long endTime = System.currentTimeMillis() - startTime;
System.out.println( "소요시간 : " + endTime + "ms." );
}
/**
*
* <PRE>
* 연속된 숫자의 합으로 자연수 표현하기
* </PRE>
*
* @param num : 자연수
* @return 연속된 숫자의 합으로 표현 가능한 경우의 수
*/
public static int getExpressions( int num ) {
int answer = 0;
for ( int i = 1 ; i <= num ; i++ ) {
int sum = 0;
// STEP 1. i부터 num까지 더하며 15가 되는 수를 찾는다.
for ( int j = i ; j <= num ; j++ ) {
sum = sum + j;
// STEP 2. 합이 15가 되면 카운트를 늘린다.
if ( sum == num ) {
answer++;
}
}
}
return answer;
}
}