본문 바로가기
CodingTest/Programmers

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

by yoondoo 2022. 12. 15.
728x90
class Solution {
    public int solution(int[] array, int n) {
        int answer = 99;
        int num = 100;
        for(int i=0; i < array.length; i++){
            if(Math.abs(n-array[i]) < answer){
                answer = Math.abs(n-array[i]);      //answer값 새로 갱신
                num = array[i];
            }else if(Math.abs(n-array[i])==answer && array[i] < num){
                num = array[i];     //혹시 가까운 차이는 같은데 array[i]가 더 작을 경우
            }                       //ex) n=11인데 10과 12를 비교하는 경우
        }
        
        return num;
    }
}

answer는 n과 배열의 값들의 차이를 비교할 때 사용할 변수다. 99인 이유는

  • 1 ≤ array의 원소 ≤ 100
  • 1 ≤ n ≤ 100

최대의 경우 배열의 원소가 1이고 n이 100일 경우 차이는 99

 

num은 정답이 될 변수다. 문제에서 n과 가장 가까운 수 즉 차이가 제일 적은 수를 반환하라고 되어있다.

그런데 제한사항으로 

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

가까운 수가 여러 개일 경우 더 작은 수를 리턴하라고 한다. 추가로 n의 범위는 1 ~ 100

두 가지를 종합해서 최대의 경우인 케이스는 n이 99이고 array원소가 98과 100일 경우다.

즉 98과 100은 n=99와 차이가 똑같이 1만큼 나는데 둘 중에 작은 수는 98이다.

그래서 num을 100으로 놓았다.

어떤 수가 배열의 원소값으로 오든 제한사항의 범위에선 100보단 작은 수가 정답이 될 것이기 때문이다.

반응형

댓글