[Programmers] #120890 - 가까운 수 [Java][C++][Python]
정수 배열에서 정수 n과의 차이가 가장 작은 원소를 찾고, 차이가 같으면 더 작은 값을 반환하는 워밍업 문제.
[Programmers] #120890 - 가까운 수 [Java][C++][Python]
1. 아이디어
배열을 한 번 순회하며 n과의 절댓값 차이가 가장 작은 원소를 추적한다. 차이가 같은 원소가 나오면 더 작은 값으로 갱신한다.
2. 복잡도
| 접근 | 시간 | 공간 |
|---|---|---|
| 풀이 | $O(N)$ | $O(1)$ |
($N$ = array의 길이)
3. 코드
풀이 [Java][C++][Python]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public int solution(int[] array, int n) {
int ans = 0;
int diff = 100;
for (int x : array) {
if (Math.abs(x - n) < diff) {
ans = x;
diff = Math.abs(x - n);
} else if (Math.abs(x - n) == diff && x < ans) {
ans = x;
}
}
return ans;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <bits/stdc++.h>
using namespace std;
int solution(vector<int> array, int n) {
int ans = 0;
int diff = 100;
for (int x : array) {
if (abs(x - n) < diff) {
ans = x;
diff = abs(x - n);
} else if (abs(x - n) == diff && x < ans) {
ans = x;
}
}
return ans;
}
1
2
def solution(array, n):
return min(array, key=lambda x: (abs(x - n), x))
min에 key로 (abs(x - n), x) 튜플을 넘긴다. 튜플은 앞 원소부터 차례로 비교되므로 먼저 n과의 절댓값 차이가 가장 작은 원소가 뽑히고, 그 차이가 같은 원소가 여럿이면 두 번째 원소인 원소값이 더 작은 쪽이 선택된다. 별도의 동점 처리 분기 없이 정렬 키 하나로 두 조건이 동시에 해결된다.
This post is licensed under CC BY 4.0 by the author.