문제설명
정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
입출력 예
array | k | result |
---|---|---|
[3, 10, 28] | 20 | 28 |
[10, 11, 12] | 13 | 12 |
입출력 예 설명
입출력 예 #1
입출력 예 #2
풀이
1. 주어진 값 n과 배열 array요소들 간의 차이중 가장 작은 값(gap)을 구한다.
2. gap의 최대값은 제한사항의 배열 원소의 최대값으로 정함.(제한조건 2, 3)
3. gap의 최소값이 구해지면, 다시 배열 array요소 들 중 k와 gap이 같은 요소들을 구한다.
4. 그 요소들을 closestNumbers에 추가하고 오름차순으로 정렬하여, 첫번째 값을 출력한다.(제한조건 4번)
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class Solution {
public int solution(int[] array, int n) {
List<Integer> closestNumbers = new ArrayList<>();
int gap = 100;
for (int i = 0; i < array.length; i++) {
if (Math.abs(array[i] - n) < gap) {
gap = Math.abs(array[i] - n);
}
}
for (int i = 0; i < array.length; i++) {
if(Math.abs(array[i] - n) == gap) {
closestNumbers.add(array[i]);
}
}
Collections.sort(closestNumbers);
return closestNumbers.get(0);
}
}
또는 stream을 사용하지 않고 array를 먼저 정렬해준 뒤 나머지 과정을 진행해도 같은 결과를 얻을 수 있다.
import java.util.Arrays;
class Solution {
public int solution(int[] array, int n) {
int answer = 0;
Arrays.sort(array);
int gap = 100;
for (int i = 0; i < array.length; i++) {
if (Math.abs(array[i] - n) < gap) {
gap = Math.abs(array[i] - n);
}
}
for (int i = 0; i < array.length; i++) {
if(Math.abs(array[i] - n) == gap) {
answer = array[i];
break;
}
}
return answer;
}
}
참고