문제 설명
정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ array의 길이 ≤ 100 1 ≤ array의 원소 ≤ 100 1 ≤ n ≤ 100 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.
나의 코드
class Solution {
public int solution(int[] array, int n) {
int min = Integer.MAX_VALUE;
int answer = 0;
for(int num : array) {
int diff = Math.abs(num - n);
if(diff<min) {
min = diff;
answer = num;
}
}
return answer;
}
}
class Solution {
public int solution(int[] array, int n) {
int min = Integer.MAX_VALUE;
int answer = 0;
for(int num : array) {
int diff = Math.abs(num - n);
if(diff<min) {
min = diff;
answer = num;
} else if(diff==min && num<answer) {
answer = num;
}
}
return answer;
}
}
다른 사람 코드
import java.util.*;
class Solution {
public int solution(int[] array, int n) {
int answer = 0;
Arrays.sort(array);
for(int i = 1 ; i < array.length ; i++){
if(Math.abs(n-array[0]) > Math.abs(n-array[i])){
array[0] = array[i];
}
}
answer = array[0];
return answer;
}
}
느낀 점
반복문을 통해 배열의 인덱스를 돌며 n
과의 차이가 가장 작은 값을 저장하고, 해당 값의 기본 값을 저장해주는 풀이로 문제에 접근했다. 그러나 첫 번째 코드로 실행하니 18개의 테스트에서 2개가 실패됐다. 무슨 문젠지 곰곰히 생각하다가 두 수의 차이와 저장해둔 가장 작은 차이값을 비교할 때 같은 경우를 추가하여 풀어내니 해결되었다.
다른 사람 코드와 같이 미리 배열을 정렬시킨 후 풀이하는 방법도 존재했다.