[ 프로그래머스 ][ Java ] 가까운 수

chorok ☘️·2025년 6월 30일

코딩테스트

목록 보기
24/54
post-thumbnail

코딩테스트 연습 > 코딩테스트 입문 > 가까운 수

⚡ 문제 설명

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

⚡ 제한사항

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

⚡ 입출력 예

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

⚡ 구현코드

나의 문제 풀이

import java.util.HashMap;
import java.util.Collections;
import java.util.Map;

class Solution {
    public int solution(int[] array, int n) {
        HashMap<Integer, Integer> abs = new HashMap<>();
        for(int i=0; i<array.length; i++){
            abs.put(array[i], Math.abs(array[i]-n));
        }
        
        return Collections.min(abs.entrySet(), Map.Entry.comparingByValue()).getKey();
    }
}

다른 사람의 문제 풀이

import java.util.Arrays; 

class Solution {
    public int solution(int[] array, int n) {
        Arrays.sort(array);
        
        int answer = 0;
        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;
    }
}

⚡ 구현코드 해설

나의 코드

HashMap을 사용해서 key에는 array 배열의 값, value에는 n-array[i]를 한 절대값을 넣었다.
value 값이 최솟값인 key를 return 해주었다.

다른 사람의 코드

array를 먼저 오름차순으로 정렬하고,
반복문을 사용해서 절댓값의 최솟값을 구했다.

새로 알게된 개념

코드 설명:

return Collections.min(abs.entrySet(), Map.Entry.comparingByValue()).getKey();

abs.entrySet():

  • abs는 HashMap<Integer, Integer> 형식의 객체입니다.
  • entrySet() 메서드는 이 HashMap에서 Map.Entry<Integer, Integer>의 집합을 반환합니다.
  • 각 Map.Entry는 키-값 쌍을 나타냅니다. 예를 들어, {key1, value1}, {key2, value2}, ...와 같은 형식입니다.

Map.Entry.comparingByValue():

  • comparingByValue()는 Map.Entry의 값(value)을 기준으로 정렬하는 Comparator를 반환합니다.
  • 이 Comparator는 각 Map.Entry를 비교할 때 값을 기준으로 비교하므로, 값이 작은 순서대로 정렬됩니다.
  • 즉, Map.Entry<Integer, Integer>에서 value를 기준으로 비교하는 역할을 합니다.

Collections.min(..., Comparator):

  • Collections.min()은 주어진 컬렉션에서 최소값을 찾는 메서드입니다.
  • 첫 번째 인자로 entrySet()을 넘기면, Map.Entry 집합에서 최소값을 찾습니다.
  • 두 번째 인자인 Map.Entry.comparingByValue()는 최소값을 찾을 때 어떤 기준으로 비교할지를 지정합니다. 여기서는 value를 기준으로 비교합니다.

.getKey():

  • min()은 최소값을 가진 Map.Entry를 반환합니다.
  • Map.Entry에서 .getKey() 메서드는 해당 entry의 키를 반환합니다.

요약

  • Collections.min(abs.entrySet(), Map.Entry.comparingByValue())는 abs 맵에서 값이 가장 작은 entry를 찾고,
  • .getKey()는 그 entry의 키를 반환하는 방식입니다.
profile
백엔드 개발자 chorok's velog

0개의 댓글