가까운 수 찾기

김세호·2022년 12월 7일
0

내 풀이

import java.util.Arrays;
import java.lang.Math;
class Solution {
    public int solution(int[] array, int n) {
        int answer = 0;
        Arrays.sort(array); 
        int min =array[array.length-1];//n과 배열 원소의 차가 최소값 일 때, 그 배열 원소의 값을 담는 변수
        int absMin = Math.abs(array[array.length-1]-n);//n과 배열 원소의 차를 담는 변수
        for (int i = array.length-1 ; i >=0  ; i--){//
            if( (Math.abs(array[i]-n) <= absMin)){//이전 n과 배열 원소의차 보다 현재 인덱스의 n과 배열 원소의 차가 더 작을 때
                absMin = Math.abs(array[i]-n); // 해당 n과 배열 원소의 차 값을 대입
                min = array[i]; // 해당 배열 원소를 대입
            }
        }
        answer = min;
        return answer;
    }
}
  • 예를들어 arr = {2,4,6,8,10,12,10,8,14,10,}이고 n=9 라고하자.
  • 가까운 수를 찾을 때 절대값을 이용하여 n과 array배열 원소의 차가 가장 작은 것 뽑았다.
  • n과 array배열 원소의 차(절대값)가 가장 작은 수는 9-8과 9-10 즉 차가 1일 때, 원소 8과 10이 가까운 수가 된다.
  • 문제에서 가까운 수가 여러 개(8, 10) 일 때 더 작은 수(8)를 return 하라 하였으므로 8이 출력 되야한다.
  • 출력값은 index가 필요하지 않으므로 sort를 이용해 배열을 작은수 부터 오름차순으로 정렬하였다.
  • index의 역순으로 n과 array배열 원소의 차가 가장 작은 것을 찾아 갔다. 오름차순으로 먼저 정렬 하였으므로 역순으로 진행 해야 n과 array배열 원소의 차가 같을 때 그 중 더 작은 원소를 min 값에 대입 할 수 있다.

0개의 댓글