코딩테스트연습/[프로그래머스] Java

[프로그래머스] Java 코딩테스트 연습 - 가까운 수

_꼬마돌 2023. 8. 8. 19:47
반응형

[프로그래머스] Java 코딩테스트 연습 - 가까운 수

문제 출처

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제

정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.
가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.

 

풀이

정수 n과 array 배열의 원소의 차를 담을 변수 diff, 
가장 작은 diff를 담을 변수 min을 선언했다.
변수 min을 선언할 때 Integer.MAX_VALUE로 초기화했다. 다른 변수들 처럼 0으로 초기화하면 최솟값을 담는 게 불가능하기 때문이다. diff가 min보다 작을 때 min에 diff값을 할당하는데, min이 0이라면 아무런 값도 할당할 수 없게 된다. (Integer.MAX_VALUE는 int 데이터 타입의 최대값을 나타낸다. 이 값은 2,147,483,647이다.)

for문으로 n와 array[i]의 절대값 차를 구해서 diff에 담고 diff가 min보다 작을 때마다 min을 해당 diff값으로 초기화했다. (절대값 차가 작을수록 n과 array배열의 원소 값이 가까움) 그 다음에 해당 인덱스의 array원소를 answer에 담았다.

가장 가까운 수가 여러개일 경우 더 작은 수를 return하라는 조건에 따라 if문을 추가했다.
diff 와 min이 같으면 n으로부터 동일한 거리에 있는 수가 여러개라는 뜻이므로 그중 가장 작은 수를 answer에 담아 return하도록 했다.

 

소스코드

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

 

반응형