[7에 가까운 정수 - Easy]

import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Arrays;

/**
 * <PRE>
 * [7에 가장 가까운 정수 찾기]
 * 
 * 10개의 정수가 저장된 배열에서 7에 가장 가까운 정수를 찾아서 출력한다.
 * 배열에 기억되어 있는 순서에 따라 10개의 정수와 7과의 차이값을 구하여 그 차이값 중 가장 최소값을 
 * 가지는 정수를 7에 가장 가까운 값으로 선택하여 출력하라.
 * (단, 배열에 기억된 10개의 데이터는 절대값이 500이하의 랜덤한 정수라고 가정한다.)
 * 
 * <실행결과>
 * Random 배열 : [106, 204, -75, 0, 33, 421, -223, -27, 376, 11]
 * 7에 가장 가까운 정수 : 11
 * 
 * </PRE>
 *
 * @author    성시찬D
 */
public class Test06 {
	public static void main( String[] args ) {
		// 시작시간 기록
		long startTime = System.currentTimeMillis();

		process();

		// 종료시간 기록
		long endTime = System.currentTimeMillis() - startTime;
		System.out.println( "소요시간 : " + endTime + "ms." );
	}

	/**
	  * 
	 * <PRE>
	 * 
	 * 절대값이 500 이하인 랜덤배열을 생성하고, 그 중 7과 가장 가까운 수를 찾아서 출력한다.
	 * (랜덤하게 생성한 배열도 출력한다.)
	 * 
	 * </PRE>
	 * @throws NoSuchAlgorithmException 
	 * 
	 */
	public static void process() {
		// STEP 1. 결과데이터 준비
		int minGap = 507; // 랜덤수가 -500이라면 제일 먼거리는 507
		int minGapNum = 0; // 7과 가장 가까운 수

		try {
			SecureRandom random = SecureRandom.getInstance( "SHA1PRNG" );

			// STEP 1. 절대값 500 이하의 랜덤배열 생성
			int[] randomArray = new int[10];
			for ( int inx = 0 ; inx < 10 ; inx++ ) {
			  // 0 ~ 1000 >> -500 ~ 500
				randomArray[inx] = random.nextInt( 1001 ) - 500; 
			}
			System.out.println( "Random 배열 : " + Arrays.toString( randomArray ) );

			// STEP 2. 7에 가장 가까운 수를 찾는다.
			for ( int inx = 0 ; inx < 10 ; inx++ ) {
				int tmpGap = Math.abs( randomArray[inx] - 7 );
				if ( tmpGap < minGap ) {
					minGap = tmpGap;
					minGapNum = randomArray[inx];
				}
			}
			// STEP 3. 출력
			System.out.println( String.format( "7 에 가장 가까운 정수 : %d", minGapNum ) );
		} catch ( NoSuchAlgorithmException e ) {
			e.printStackTrace();
		}
	}
}