가까운 수
2024. 9. 5. 18:00ㆍ코딩테스트 입문
https://school.programmers.co.kr/learn/courses/30/lessons/120890
문제 설명
정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ array의 길이 ≤ 100
- 1 ≤ array의 원소 ≤ 100
- 1 ≤ n ≤ 100
- 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.
입출력 예
array | n | result |
[3, 10, 28] | 20 | 28 |
[10, 11, 12] | 13 | 12 |
입출력 예 설명
입출력 예 #1
- 3, 10, 28 중 20과 가장 가까운 수는 28입니다.
입출력 예 #2
- 10, 11, 12 중 13과 가장 가까운 수는 12입니다.
주어진 숫자 n에 가까운 순서대로 정렬하는 문제입니다.
파이썬의 정렬은 key 값을 설정하는 걸로 할 수 있는데요, 여기서는 람다 함수를 사용해서 문제를 풀 수 있습니다.
거리는 절댓값이기 때문에 절댓값을 1번 기준으로, 그다음은 작은 값 우선을 2번 기준으로 설정하면 됩니다.
파이썬으로 문제를 풀어보겠습니다.
def solution(array, n):
# 리스트 array를 거리 기준 - 오름차순 기준으로 정렬합니다.
answer = sorted(array, key=lambda x:(abs(n - x), x))
# 첫 번째 값을 반환합니다.
return answer[0]
key 값에 정렬 기준을 설정하는 것으로 원하는 대로 정렬을 할 수 있습니다.
람다 함수 말고도 cmp_to_key 함수도 있는데요, key = cmp_to_key(compare) 같은 형식으로 compare 식에 따라서 정렬하는 방법도 있습니다.
cmp_to_key는 기억해두시는 걸 추천합니다. 알고리즘 문제에서도 사용되는 함수거든요.