< 문제 >
-
개요
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;
}
}