자바 알고리즘 문제

가까운 수

쿠키키키키 2024. 4. 28. 00:27

문제 설명 정수 배열 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