정수 배열 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 |
3, 10, 28 중 20과 가장 가까운 수는 28입니다.
10, 11, 12 중 13과 가장 가까운 수는 12입니다.
문제를 풀다가 놓쳤던 부분이 있다.
'가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.'이라는 제한사항 때문에 여러 조건을 만들다가 예외 케이스를 포함하지 못한 것.
하지만 답은 늘 그렇듯 더 간단한 곳에 있었다.
주어진 정수 배열 array를 .sort() 함수로 오름차순 정렬하고 시작하기
.index() 함수를 이용하면 중복되는 원소 중 가장 첫 번째를 반환한다.
그러니까 배열을 오름차순으로 정렬하고 인덱스를 구하면 가장 가까운 수가 여러 개일 경우에도 첫 번째 원소만 반환해준다. if 조건문으로 복잡하게 분기해줄 필요가 없는 것이다.
def solution(array, n):
array.sort() # 1
temp = [] # 2
for i in array :
temp.append( abs(n-i) ) # 3
return array[temp.index(min(temp))] # 4
def solution(array, n):
array.sort(key = lambda x : (abs(x-n), x-n))
answer = array[0]
return answer
lambda 함수로 푼 풀이도 확인해보자.
.sort() 함수에서 key는 정렬의 기준을 정해주는 값이다.
위 경우처럼 key 값이 여러 개가 들어갈 경우(lambda x : (abs(x-n), x-n)) 첫 번째 인자가 우선, 두 번째 인자가 차선으로 정해진다.
(음수일 때의 값도 같이 고려해준 건가...? 왜 두 번째 인자도 들어가는지는 정확히 모르겠다.)