코딩테스트 회고록/코테_Java

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

iamjisu 2023. 3. 11. 00:24

프로그래머스 코딩테스트 문제 입문단계 '가까운 수' 문제입니다.

https://school.programmers.co.kr/learn/courses/30/lessons/120890

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


❓ 문제 설명

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

 

※ 아래 입출력 예시를 참고하세요!


⚠️ 제한 사항 및 입출력 예시

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

 

입출력 예시 ▼

입력 (array, n)

[3, 10, 28]  /  20

출력 (return 값)

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

🔍 알고리즘 구상

  • array배열의 값과 n의 차를 구한다.
  • 차의 절댓값을 구해 절댓값으로 가장 n과 가까운 수를 찾는다.
  • 만약 차의 절댓값이 같은 수이면 더 작은 수를 저장한다.

절댓값을 찾는 Math 클래스의 abs() 메서드를 이용할 것입니다!


✏️ 직접 구현한 코드

import java.lang.Math;

class Solution {
    public int solution(int[] array, int n) {
        int answer = 0;
        int diff = 100;
        for(int i = 0; i < array.length; i++) {
            if(diff > Math.abs(n-array[i])) {
                answer = array[i];
                diff = Math.abs(n-array[i]);
            }
            if(diff == Math.abs(n-array[i])) {
                answer = answer > array[i]? array[i]: answer;
            }
        }
        return answer;
    }
}

🗣️ 코드 설명

  • abs() 메서드를 사용할 때 이용할 Math클래스를 import 했습니다.
  • n과 가장 가까운 수를 저장할 answer과 n과 array배열의 차의 절댓값을 담을 diff를 생성했습니다. 이때, 제한사항에서 가장 큰 수인 100으로 초기화 후 생성했습니다.
  • i가 array배열의 크기만큼 증가하며 반복하는 for문 안에서, if문을 이용하여 가장 n과 차이가 적은 array배열의 값을 answer에 저장했습니다. 만약 n과의 차이가 같다면, 삼항 연산자를 이용해 더 작은 수를 answer에 저장하도록 했습니다.

💦 어려웠던 점

n과 array배열의 차의 절댓값을 구할 때, Math 클래스에 들어있는 abs() 메서드를 이용할 때 어려움이 있었다. Math 클래스에 들어있으므로 Math.abs() 이러한 식으로 써야하지만, 앞에 Math.를 쓰지 않고 계산하려해서 계속 에러가 났다. 다른 클래스에 있는 메서드를 import해서 쓸 때 더욱 주의해야겠다!!!