프로그래머스.가까운 수

남궁진 (jinvicky)·2026년 4월 1일

Problem


https://school.programmers.co.kr/learn/courses/30/lessons/120890

Solution


최솟값을 구할 때 비교를 위해 Integer.MAX_VALUE를 초기값으로 사용한다.
가장 적은 차이를 구하는 minDiff와 가장 n으로부터 가까운 요소 closest가 필요하다고 판단했다.

더 차이가 적은 요소가 등장하면 적은 차이값(minDiff)과 가까운 요소(closest)를 업데이트하자고 생각했다.

Missing

|| (diff == minDiff && array[i] < closest) 케이스를 누락해서 70% 정답률을 받았다.

문제에 아래와 같은 조건이 있었기 때문이다.

가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.

이 말을 처음에는 이해하지 못했는데

array = [10, 20, 30]
n = 25
|25 - 20| = 5
|25 - 30| = 5 👉 차이 동일

👉 이럴 때는 더 작은 값(20)을 선택해야 한다는 뜻이었다.

Code


class Solution {
    public int solution(int[] array, int n) {
        int minDiff = Integer.MAX_VALUE;
        int closest = Integer.MAX_VALUE;
        
        for(int i = 0; i < array.length; i++) {
            int diff = Math.abs(n - array[i]);
            
            if(diff < minDiff || (diff == minDiff && array[i] < closest)) { 
                closest = array[i];
                minDiff = diff;
            }
        }
        
        return closest;
    }
}

TIL


그래도 입문 문제에서 조금씩 로직 정답률이 오르고 있다! 제발 포기하지 말자.

profile
문제를 차근차근 하나씩 해결하려고 합니다:)

0개의 댓글