가장 가까운 수를 탐색하는 5가지 방법 zip(), sort() 등 알아보기.

HEE·2025년 4월 26일
0
post-thumbnail

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)
  1. 거리 리스트 a 만들기.
  2. 최소 거리 m을 찾기.
  3. 최소거리와 같은 인덱스만 골라서 b 모으기. (가까운수가 여러개인 경우)
  4. 그 중 가장 작은수를 반환하기. (가장 작은수 반환)

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]                     # 가장 가까운 수 반환
  • 람다로 풀기도 가능하지만, 아직 람다 사용이 익숙하지 않은 관계로 람다로 푸는 방법은 생략함.
profile
ALL IS WELL

0개의 댓글