[자연수 표현방법 - Medium]

< 문제 >

  • 개요

하나의 자연수를 연속된 자연수의 합으로 어떤 숫자를 표현하는 방법이 여러 가지 존재한다. 들어, 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;
	}
}