728x90
<코딩 테스트>
정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.
- 1 ≤ array의 길이 ≤ 100
- 1 ≤ array의 원소 ≤ 100
- 1 ≤ n ≤ 100
- 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.
<나의 풀이 과정>
우선 배열을 비교할 때 필수로 Arrays.sort를 진행한 뒤,
min을 999로 초기화했습니다.
들어오는 n의 값을 하나씩 돌면서 만약에 절댓값( n-인덱스 값)을 비교하였을 때 999보다 작다면,
해당 값을 min에 초기화를 계속해주면서 모든 인덱스를 다 돌 때까지
(new int [] { 3, 10, 28 }, 20)); // 답: 28
// 20-3 = 7 / 20-10=10 / 20-28 = 8
두 수를 뺐을때 오차가 가장 적은 수의 값을 return 하도록 구현하였습니다.
<나의 풀이 코드>
import java.util.Arrays;
class Solution {
public int solution(int[] array, int n) {
int answer = 0;
int min = 999;
Arrays.sort(array);
for (int i = 0; i < array.length; i++) {
if (min > Math.abs(n - array[i])) {
min = Math.abs(n - array[i]);
answer = array[i];
}
}
return answer;
}
}
<나의 오류난 코드>
오류 1. array를 정렬했어야 하는데 num을 정렬하였습니다.
오류 2. 비교를 할 때 담을 비교 값이 선언이 되지 않았습니다.
-> 수정: min의 변수를 선언하여 if (min > Math.abs(n - array [i])) {
min = Math.abs(n - array [i]);
answer = array [i];
이렇게 변경하였습니다.
import java.util.Arrays;
class Solution {
public int solution(int[] array, int n) {
int answer = 0;
int num[] = new int[array.length];
Arrays.sort(num);
for (int i = 0, j = array.length - 1; i < array.length; i++, j--) {
num[i] = Math.abs(n - array[i]);
if (num[i] < num[j])
return answer = array[i];
}
return answer;
}
}
<다른 사람 풀이 2>
class Solution {
public int solution(int[] array, int n) {
int answer = 0;
int minDiff = Integer.MAX_VALUE;
for (int i = 0; i < array.length; i++) {
if (minDiff > Math.abs(n - array[i])) {
answer = array[i];
minDiff = Math.abs(n - array[i]);
}
if (minDiff == Math.abs(n - array[i])) {
answer = Math.min(answer, array[i]);
}
}
return answer;
}
}
728x90
'주니어 기초 코딩공부 > JAVA_programmers_코딩테스트' 카테고리의 다른 글
7의 개수_programmers_lev00 (1) | 2022.12.12 |
---|---|
한 번만 등장한 문자_programmers_lev00 (0) | 2022.12.12 |
k의 개수_programmers_lev00 (0) | 2022.12.11 |
2차원으로 만들기_programmers_lev002 (0) | 2022.12.11 |
A로 B 만들기_programmers_lev00 (0) | 2022.12.11 |