JAVA/프로그래머스 코딩테스트 입문

[프로그래머스, LV.0] 가까운 수

sundori 2024. 12. 10. 17:02

목차

    문제 설명

    정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.


    제한사항

    • 1 ≤ array의 길이 ≤ 100
    • 1 ≤ array의 원소 ≤ 100
    • 1 ≤ n ≤ 100
    • 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.

     

    class Solution {
        public int solution(int[] array, int n) {
            // 차이값 배열 생성
            int[] array_t = new int[array.length];
            for (int i = 0; i < array.length; i++) {
                array_t[i] = Math.abs(array[i] - n);
            }
    
            // 최소값의 인덱스 찾기
            int minIndex = 0;
            for (int i = 1; i < array_t.length; i++) {
                if (array_t[i] < array_t[minIndex] || 
                   (array_t[i] == array_t[minIndex] && array[i] < array[minIndex])) {
                    minIndex = i; // 더 작은 차이나 작은 값을 가진 인덱스 갱신
                }
            }
            
            return array[minIndex];
        }
    }

     

    코드 설명

    1. 차이 계산

    입력 배열의 각 요소와 기준 값 n의 절대값 차이를 계산해 새 배열에 저장한다. 이 배열은 원래 값들과 기준 값 간의 거리를 나타내며, 가장 가까운 값을 선택하는 기준으로 사용된다.

    2. 최소 차이의 인덱스 찾기

    새롭게 만든 차이 배열을 순회하며 가장 작은 차이를 가진 인덱스를 찾는다. 이 인덱스는 원래 배열에서 기준 값 n과 가장 가까운 값의 위치를 의미한다.

    3. 같은 차이가 여러 개일 때 처리

    만약 두 개 이상의 값이 기준 값과 동일한 차이를 가진다면, 원래 배열에서 값이 더 작은 쪽을 선택하도록 조건을 추가한다. 이렇게 하면 문제에서 요구하는 "더 작은 값을 반환"하는 조건을 만족시킬 수 있다.

    4. 결과 반환

    최소 차이를 가진 인덱스를 기반으로 원래 배열의 해당 값을 선택해 반환한다. 이 값이 기준 값과 가장 가까운 수다.

    728x90