문제 설명 정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.
import java.util.*;
class Solution {
public int solution(int[] array, int n) {
int answer = 0;
int[] a=new int[array.length+1];
for(int i=0 ; i<array.length;i++){
a[i]=array[i];
}
a[a.length-1]=n;
Arrays.sort(a);
int index=0;//n의 인덱스 위치
for(int i=0; i<a.length;i++){
if(a[i]==n){
index=i;
}
System.out.print(a[i]);
}
if(index>0 && index<a.length-1){
if(a[index]-a[index-1] != a[index+1]-a[index]){
answer=a[index]-a[index-1]> a[index+1]-a[index] ? a[index+1] :a[index-1];
}
else {
answer=a[index-1];
}
}else if(index==0){
answer=a[1];
}else if(index==a.length-1){
answer=a[a.length-2];
}
return answer;
}
}
새로운 배열을 만들어서 그 배열에 n 을 넣고 원래 배열도 넣은뒤
오름차순 정렬을 해서
n 옆에 있는 수 2개를 비교해서 더 가까운 값을 도출 해내게 해봤다.
근데 다른 사람의 풀이를 보다가 더 간단하게 푼사람 의 풀이도 봤는데 함 보자
import java.util.*;
class Solution {
public int solution(int[] array, int n) {
Arrays.sort(array);
int min = Math.abs(array[0]-n);
int minIdx = 0;
for(int i=1; i<array.length; i++)
if(Math.abs(array[i]-n) < min) {
min = Math.abs(array[i]-n);
minIdx = i;
}
return array[minIdx];
}
}
오호라 훨씬 좋다 절댓값을 구하느 abs 를 썼고 애초에 차이를 나타나는 변수를 만들어
그 변수보다 더 작은게 나타날때마다 갱신해주면서 풀은것 같다.
이게 더 깔끔하다 굿
'자바 알고리즘 문제' 카테고리의 다른 글
잘라서 배열로 저장하기 (0) | 2024.04.30 |
---|---|
리스트 자르기 (0) | 2024.04.30 |
A로 B만들기 (1) | 2024.04.25 |
모스부호 (1) (0) | 2024.04.25 |
수열과 구간 쿼리 1 (0) | 2024.04.24 |