본문 바로가기
Language/알고리즘 개념정리

자바 근사값(Near) 알고리즘 정리

by wakestand 2021. 5. 29.
반응형

근사값(Near) 알고리즘이란

전체 데이터 중 특정 데이터와 가장 근접한 값을 말하는데

 

포인트는 배열의 각 값 - 특정 값 계산 뒤

절대값으로 변환해서 for문 돌리며 비교 후

가장 작은 수를 가져와주면 그게 근사값이 되겠다

 

먼저 변수의 최소값을

해당 변수에 지정할 수 있는 가장 큰 숫자를 넣어주고

 

다음으로 for 문을 돌리는 과정에서

배열의 인덱스별 값 - 특정 값

을 한 뒤에 Math.abs로 절대값을 구하는데

 

만약 Math.abs를 사용하지 않고 절대값을 구하려면

값 < 0 ? -값 : 값

 

이런 식으로 삼항연산자를 사용해

0보다 작다면 -를 한번 더 해줘서 양수로 만들고

양수면 그냥 반환하는 식으로 따라해주면 된다

 

근사값의 경우에는 절대값을 구한 후에는

for 문을 돌리면서

현재 최소값보다 작을 경우 최소값을 교체해주고

정답에 해당 배열의 값을 넣어주면 된다

 

마지막으로 예제에 사용한 코드는 다음과 같다

 

	public static void main(String[] args) {
		// 근사값 알고리즘(Near Algorithm)
		// 차이값의 절대값의 최소값(전체 데이터 중 특정 데이터와 가장 근접한 값)
		int min = Integer.MAX_VALUE; // 차이값의 절대값 최소값 저장
		
		int[] arr = {10, 29, 21, 24, 30};
		int target = 20; // 해당 데이터와 가장 근접한 값을 찾아야 함
		int answer = 0;
		
		//
		for(int i = 0; i < arr.length; i++) {
			int abs = Math.abs(arr[i] - target); // 차이값의 절대값 반환
			if(abs < min) { // 절대값이 최소값보다 작다면
				min = abs; // 최소값 교체
				answer = arr[i]; // 정답
			}
		}
		
		System.out.println(target + "과 가장 가까운 값 : " + answer);
		System.out.println(target + "과 가장 가까운 값의 차이 : " + min);
	}
반응형

댓글