JAVA 공부

[ 프로그래머스 - Java ] 가까운 수

hakstroy 2024. 12. 9. 10:20

 

 

※ 배운 점

1. Math.abs() 절대값으로 변환

 : 수학에서 숫자의 절대값은 전달된 숫자의 양수값과 같다. ex) |+5| = 5 , |-5| = 5

 : import java.util.* or java.lang.Math 클래스 선언 필요하다. (라이브러리)

 : Math.abs(n) ex) Math.abs(-5) = 5

- 가까운 수를 찾기 위해 매개변수와 배열의 값의 차를 구하기 위해 양수의 값으로 표현하기 위해 사용.

 

2. Arrays.sort() 정렬 

 : 기본값으로 오름차순으로 정렬이 된다. 

 : 10, 3, 28 --> 3, 10, 28 로 정렬.

 

문제 설명

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

 

제한 사항

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

 

 

입출력 예

입출력 예 설명

 

입출력 예 #1

3, 10, 28 중 20과 가장 가까운 수는 28입니다.

입출력 예 #2

10, 11, 12 중 13과 가장 가까운 수는 12입니다.

 

 

나의 풀이

import java.util.*;

class Solution {
    public int solution(int[] array, int n) {
        int answer = 0;
        Arrays.sort(array); // 배열 array값을 정렬한다. 기본적으로 오름차순
        
        for(int i=1; i<array.length; i++){
            // n(20) - array[0](3) || n(20) - array[1](10)
            // 1. 20-3 = 17        || 20 - 10 = 10
            /* if(17>10){
                array[0] = array[1] == 0번째에 값 : 10을 넣는다.
            }*/
            // n(20) - array[0](10)    || n(20) - array[2](28)
            // 2. 20 - 10 = 10         || 20 - 28 = -8 abs(-8) = 8
            /* if(10 > 8){
                array[0] = array[2](28) == 0번째에 값 : 28을 넣는다.
            }            
            */

            // Math.abs()  수학라이브러리에서 제공하는 수학 함수 : abs() 절대값 변환
            if(Math.abs(n-array[0]) > Math.abs(n-array[i])){
                array[0] = array[i];
            }
        }
        // 최종적으로 들어가는 값 array[0](28)을 answer 변수에 넣는다.
        answer = array[0];
        return answer;
    }
}

 

※ 정렬된 값 중 첫 번째 값은 고정시킨 후 하나하나 차이값으로 비교를 한다. 기존 0번째 값 차이보다 작으면 0번째값에 값을 넣고 반복적으로 비교를 하여 제일 차이값이 작은 값을 넣어서 출력한다..

 

 

# 아직..모르는게..많다...답을 보면..이해하지만..돌면 까먹고...더 열심히하자..