반응형
[프로그래머스] Java 코딩테스트 연습 - 가까운 수
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/120890
문제
정수 배열 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;
}
}
반응형
'코딩테스트연습 > [프로그래머스] Java' 카테고리의 다른 글
[프로그래머스] Java 코딩테스트 연습 - 한 번만 등장한 문자 (0) | 2023.08.10 |
---|---|
[프로그래머스] Java 코딩테스트 연습 - 2의 영역 (0) | 2023.08.09 |
[프로그래머스] Java 코딩테스트 연습 - 이차원 배열 대각선 순회하기 (0) | 2023.08.07 |
[프로그래머스] Java 코딩테스트 연습 - 주사위 게임 3 (0) | 2023.08.06 |
[프로그래머스] Java 코딩테스트 연습 - 배열의 길이를 2의 거듭제곱으로 만들기 (0) | 2023.08.05 |