https://school.programmers.co.kr/learn/courses/30/lessons/120890
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[문제 설명]
정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요. 정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ array의 길이 ≤ 100
- 1 ≤ array의 원소 ≤ 100
- 1 ≤ n ≤ 100
- 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.
[나의 풀이]
def solution(array, n):
# n과의 절대 차이를 저장할 리스트 a를 초기화
a = [abs(i - n) for i in array]
# 절대 차이가 최소인 값 찾기
min_diff = min(a)
# 가장 가까운 수를 찾고, 여러 개일 경우 더 작은 수 반환
closest_numbers = [array[i] for i in range(len(a)) if a[i] == min_diff]
return min(closest_numbers) # 가장 작은 값을 반환
챗지피티의 도움을 받아서 완성된 나의 코드
나의 아이디어는 차이의 절댓값을 a에 저장한 다음 그 중 가장 작은 값을 갖는 index를 array로 가져가서 찾는거였다.
만약 중복되는 것이 있다면 min을 통해 해결하려했는데 지피티가 깔끔하게 정리해줬다.
[다른 풀이]
sort함수에서 key값을 지정해주고 [0]으로 return하는 경우
solution=lambda array, n:sorted(array,key=lambda x:(abs(x-n),x))[0]
def solution(array, n):
array.sort(key = lambda x : (abs(x-n), x-n))
answer = array[0]
return answer
작은 수를 sort함수를 통해 먼저 앞으로 빼주어서 .index(min(temp))로 불러오는 경우
def solution(array, n):
array.sort()
temp = []
for i in array :
temp.append( abs(n-i) )
return array[temp.index(min(temp))]