1. 프로그래머스 python 코딩테스트 입문
Level 0. 가까운 수
정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요. (가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.)
나의 오답과 이유
def solution(array, n):
a = []
for i in array:
a.append(max(i,n)-min(i,n))
b = a.index(min(a))
return array[b]
zip()
으로 풀 수 있을 것 같은데, (0,0)이렇게 두 칸인 경우 정렬을 어떻게해야할지 몰라서 zip()
을 사용하지 못함.정답
1. 나의 오답을 최대한 수정한 답
def solution(array, n):
a = [abs(i - n) for i in array]
m = min(a)
b = [array[i] for i in range(len(array)) if a[i] == m]
return min(b)
2. sort()
함수를 사용하여 깔끔하게 풀기.
def solution(array, n):
a = []
for i in array:
a.append((abs(i - n), i))
a.sort()
return a[0][1]
list.sort()
: 원본이 변형됨 / return 바로 사용 못함.sorted()
: 새로운 리스트 반환 / return 사용 가능.3. sorted()
함수로 변경
def solution(array, n):
a = [(abs(i - n), i) for i in array] # 거리와 값 튜플 리스트
b = sorted(a) # 새 리스트 b에 정렬 결과 저장
return b[0][1] # 가장 가까운 수의 값 리턴
4. 제너레이터 표현식
사용 한줄로. (리스트 컴프리헨션 없음)
def solution(array, n):
return sorted((abs(i - n), i) for i in array)[0][1]
5. zip()
함수 사용해서 풀기.
def solution(array, n):
a = [abs(i - n) for i in array] # 거리 리스트
b = list(zip(a, array)) # (거리, 값) 튜플로 묶기
b.sort() # 거리 → 값 순서로 정렬
return b[0][1] # 가장 가까운 수 반환