[최소거리 - Easy]

< 문제 >

  • 개요
    1차원의 점들이 주어졌을 때, 그 중 가장 거리가 짧은 것의 쌍을 출력하는 함수를 작성하시오. 단 점들의 배열은 모두 정렬되어있다고 가정한다. (10분)

  • 예상 결과
    예상 결과는 하기 코드 실행시 예상되는 결과 값이다.

 결과 : S={1, 3, 4, 8, 13, 17, 20}  >>  3, 4

< 정답풀이 >

 public class test01 {

	private static final String result = "결과 : S=%s의 거리가 짧은 쌍 >> %d,  %d";

	public static void main( String[] args ) {
		// 시작시간 기록
		long startTime = System.currentTimeMillis();

		// STEP 1. TEST 데이터 준비
		int[] testArr = { 1, 3, 4, 8, 13, 17, 20 };

		// STEP 2. 최소 거리
		int[] resultArr = getMinDistance( testArr );
		System.out.println( String.format( result, Arrays.toString( testArr ), resultArr[0], resultArr[1] ) );

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

	/**
	 * <PRE>
	 * 거리가 짧은 쌍을 리턴한다.
	 * </PRE>
	 * 
	 * @param testArr : 숫자 배열
	 * @return int [] : 거리가 짧은 쌍의 배열
	 */
	public static int[] getMinDistance( int[] testArr ) {
		int[] resultArr = new int[2]; // 결과 값 저장을 위한 배열
		int minDist = -1;             // 최소거리(초기값 -1)

		/*
		 * 입력받은 배열의 값을 2개씩 꺼내서 두 값 사이의 절대값을 구함. 
		 * 절대값이 작은 두 값이 결과값이 된다.
		 */
		for ( int inx = 1 ; inx < testArr.length ; inx++ ) {
			int firstNum = testArr[inx - 1];
			int secondNum = testArr[inx];

			// 최소거리를 구한다.(절대값)
			int dist = Math.abs( secondNum - firstNum );

			// 최소거리가 더 적은 경우 갱신한다.
			if ( minDist == -1 || minDist > dist ) {
				minDist = dist;
				resultArr[0] = firstNum;
				resultArr[1] = secondNum;
			}
		}
		return resultArr;
	}
}