본문 바로가기

Java/코딩테스트

[프로그래머스/120890] 가까운 수(Math.abs(), Math.min(answer, array[i]), 처음부터 배열을 sort했다면?)

✏️ 문제 설명

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

 

제한사항

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

 


✏️ code

📌 Math.abs()
: array[i]와 n의 차를 절대값으로 변경합니다.

📌 if(valueDiffs[i] == minDiff) { answer = Math.min(answer, array[i])}
: 동일한 차가 발생한 경우, 더 작은 수를 return 합니다.

🖥️ 아쉬운 점
: array를 sort한 뒤 차이를 구했다면, 같은 차이를 갖는 갑슫ㄹ 중 가장 작은 값이 앞에 위치하기 때문에 동일한 값을 비교하는 횟수를 줄일 수 있었을 것으로 예상됩니다.
class Solution {
    public int solution(int[] array, int n) {
        int valueDiffs[] = new int[array.length];
        for (int i = 0; i < array.length; i++) {
            valueDiffs[i] = Math.abs(n - array[i]);
        }
        
        int minDiff = valueDiffs[0];
        int answer = array[0];
        for (int i = 0; i < array.length; i++) {
            if (valueDiffs[i] < minDiff) {
                minDiff = valueDiffs[i];
                answer = array[i];
            } else if (valueDiffs[i] == minDiff) {
                answer = Math.min(answer, array[i]);
            }
        }
        
        return answer;
    }
}
반응형