문제 설명 정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.
import java.util.*;
class Solution {
    public int solution(int[] array, int n) {
        int answer = 0;
        int[] a=new int[array.length+1];
        for(int i=0 ; i<array.length;i++){
            a[i]=array[i];
        }
        a[a.length-1]=n;
        Arrays.sort(a);
        int index=0;//n의 인덱스 위치
        for(int i=0; i<a.length;i++){
            if(a[i]==n){
                index=i;
            }
            System.out.print(a[i]);
        }
        if(index>0 && index<a.length-1){
            if(a[index]-a[index-1] != a[index+1]-a[index]){
                answer=a[index]-a[index-1]> a[index+1]-a[index] ? a[index+1] :a[index-1];
            }
            else {
                answer=a[index-1];
            }
        }else if(index==0){
            answer=a[1];
        }else if(index==a.length-1){
            answer=a[a.length-2];
        }
        return answer;
    }
}
새로운 배열을 만들어서 그 배열에 n 을 넣고 원래 배열도 넣은뒤
오름차순 정렬을 해서
n 옆에 있는 수 2개를 비교해서 더 가까운 값을 도출 해내게 해봤다.
근데 다른 사람의 풀이를 보다가 더 간단하게 푼사람 의 풀이도 봤는데 함 보자
import java.util.*;
class Solution {
    public int solution(int[] array, int n) {
        Arrays.sort(array);
        int min = Math.abs(array[0]-n);
        int minIdx = 0;
        for(int i=1; i<array.length; i++)
            if(Math.abs(array[i]-n) < min) {
                min = Math.abs(array[i]-n);
                minIdx = i;
            }
        return array[minIdx];
    }
}
오호라 훨씬 좋다 절댓값을 구하느 abs 를 썼고 애초에 차이를 나타나는 변수를 만들어
그 변수보다 더 작은게 나타날때마다 갱신해주면서 풀은것 같다.
이게 더 깔끔하다 굿
'자바 알고리즘 문제' 카테고리의 다른 글
| 잘라서 배열로 저장하기 (0) | 2024.04.30 | 
|---|---|
| 리스트 자르기 (0) | 2024.04.30 | 
| A로 B만들기 (1) | 2024.04.25 | 
| 모스부호 (1) (0) | 2024.04.25 | 
| 수열과 구간 쿼리 1 (0) | 2024.04.24 |