728x90
class Solution {
public int solution(int[] array, int n) {
int answer = 99;
int num = 100;
for(int i=0; i < array.length; i++){
if(Math.abs(n-array[i]) < answer){
answer = Math.abs(n-array[i]); //answer값 새로 갱신
num = array[i];
}else if(Math.abs(n-array[i])==answer && array[i] < num){
num = array[i]; //혹시 가까운 차이는 같은데 array[i]가 더 작을 경우
} //ex) n=11인데 10과 12를 비교하는 경우
}
return num;
}
}
answer는 n과 배열의 값들의 차이를 비교할 때 사용할 변수다. 99인 이유는
- 1 ≤ array의 원소 ≤ 100
- 1 ≤ n ≤ 100
최대의 경우 배열의 원소가 1이고 n이 100일 경우 차이는 99
num은 정답이 될 변수다. 문제에서 n과 가장 가까운 수 즉 차이가 제일 적은 수를 반환하라고 되어있다.
그런데 제한사항으로
- 1 ≤ array의 원소 ≤ 100
- 1 ≤ n ≤ 100
- 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.
가까운 수가 여러 개일 경우 더 작은 수를 리턴하라고 한다. 추가로 n의 범위는 1 ~ 100
두 가지를 종합해서 최대의 경우인 케이스는 n이 99이고 array원소가 98과 100일 경우다.
즉 98과 100은 n=99와 차이가 똑같이 1만큼 나는데 둘 중에 작은 수는 98이다.
그래서 num을 100으로 놓았다.
어떤 수가 배열의 원소값으로 오든 제한사항의 범위에선 100보단 작은 수가 정답이 될 것이기 때문이다.
반응형
'CodingTest > Programmers' 카테고리의 다른 글
| [프로그래머스] Lv.0 7의 개수 (0) | 2022.12.28 |
|---|---|
| [프로그래머스] Lv.0 진료순서 정하기** (0) | 2022.12.19 |
| [프로그래머스] LV.0 k의 개수 (0) | 2022.12.15 |
| [프로그래머스] Lv.0 2차원으로 만들기* (0) | 2022.12.15 |
| [프로그래머스] Lv.0 팩토리얼 (0) | 2022.12.01 |
댓글