프로그래머스/JAVA/가까운 수

Seoung Young Oh·2022년 12월 26일
0

프로그래머스

목록 보기
72/105
post-thumbnail

문제설명

정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ array의 길이 ≤ 100
  • 1 ≤ array의 원소 ≤ 100
  • 1 ≤ n ≤ 100
  • 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.

입출력 예

arraykresult
[3, 10, 28]2028
[10, 11, 12]1312

입출력 예 설명

입출력 예 #1

  • 3, 10, 28 중 20과 가장 가까운 수는 28입니다.

입출력 예 #2

  • 10, 11, 12 중 13과 가장 가까운 수는 12입니다.

풀이

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;
	}
}

참고

0개의 댓글

Powered by GraphCDN, the GraphQL CDN