<aside> 💬 lv0, 정렬

두 점 사이의 거리

문제 설명

직선 위에 각각 점이 [1, 3, 5, 6, 10, 12, 19] 찍혀져 있을 때 두 점 사이의 거리가 가장 짧은 것은 [5, 6]입니다. 두 점 사이가 가장 짧은 쌍을 출력하는 solution함수를 완성해주세요.


제한 사항


입출력 예

입력 출력
[1, 3, 4, 6] [3, 4]
[1, 10, 20, 25, 31, 40] [20, 25]

입출력 설명

[1, 3, 4, 6]이 입력되었을 때 [1, 3]은 차가 2이고, [3, 4]는 차가 1이고, [4, 6]은 차가 2입니다. 따라서 가장 작은 길이를 가진 [3, 4]를 출력해야 합니다.

</aside>

😺 풀이 1. abs() 함수

def solution(data):
    x = list(zip(data, data[1:])) **#1 리스트 및 zip()함수**
    return list(sorted(x, key=lambda x: abs(x[1] - x[0]))[0]) **#2 sorted() 함수 절댓값** 

단계별 풀이 전략

이 코드는 입력으로 주어진 리스트에서 서로 인접한 두 요소 간의 차이가 가장 작은 쌍을 찾아서 반환합니다.

  1. 리스트 및 zip() 함수

    zip() 함수를 사용하여 입력 데이터의 인접한 요소들을 묶습니다. zip(data, data[1:])는 각 요소와 그 다음 요소를 튜플로 묶은 이터레이터를 생성합니다.

  2. sorted() 함수 및 차이의 절댓값

    sorted() 함수를 사용하여 인접한 요소 쌍을 차이의 절댓값을 기준으로 정렬합니다.

    람다 함수 lambda x: abs(x[1] - x[0])를 사용하여 각 요소 쌍의 차이의 절댓값을 기준으로 정렬합니다. 따라서 가장 작은 차이를 가진 쌍이 리스트의 맨 앞에 위치하게 됩니다. 정렬된 결과 중 가장 작은 차이를 가진 쌍을 선택합니다. 이 쌍은 리스트의 맨 앞에 위치하므로 인덱스 0을 사용하여 선택합니다.

    이 결과는 튜플 형태로 반환됩니다.

알아둬야 할 개념

차이의 절댓값

풀이 2. min()함수

def solution(data):
    sorted_data = sorted(data)
    return list(min(zip(sorted_data, sorted_data[1:]), key=lambda x: \\ **#1 정렬 #2 zip()**
    abs(x[0] - x[1]))) #3 min()

단계별 풀이 전략

  1. 정렬된 리스트

    첫 번째 요소를 제외한 나머지 요소를 선택합니다. 이를 통해 리스트에서 각 요소와 그 다음 요소를 짝지어줄 수 있습니다.

  2. zip() 함수

    각 요소와 그 다음 요소의 쌍을 형성합니다.

  3. 절댓값 계산

    그 중 가장 작은 차이를 가진 쌍을 찾습니다.

알아둬야 할 개념

min 함수