코딩테스트 회고록/코테_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해서 쓸 때 더욱 주의해야겠다!!!