주니어 기초 코딩공부/JAVA_programmers_코딩테스트

가까운 수_programmers_lev00

jju_developer 2022. 12. 11. 17:22
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