Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 프로그램: 리스트 내 모든 쌍 사이의 절대 차이 합 구하기

이 글에서는 주어진 문제를 해결하기 위한 풀이 방법과 접근 방식에 대해 알아보겠습니다.

문제 정의

리스트가 입력으로 주어졌을 때, 리스트 내 모든 쌍(pair) 사이의 절대 차이(absolute difference)의 합을 구해야 합니다.

접근 방법

이 문제는 enumerate() 메서드를 활용해 해결할 수 있습니다. enumerate()는 반복 가능한(iterable) 객체에 카운터를 추가하고, 이를 enumerate 객체 형태로 반환하는 파이썬 내장 함수입니다.

구체적인 풀이 과정은 다음과 같습니다.

먼저 절대 차이 값을 저장할 빈 리스트 'diffs'를 준비합니다.

그다음 두 개의 루프와 두 개의 변수를 사용합니다. 하나는 인덱스(카운터)를 순회하기 위한 것이고, 다른 하나는 리스트의 요소를 순회하기 위한 것입니다. 매 반복마다 두 요소가 서로 다른지, 즉 같은 위치의 요소인지 아닌지를 확인합니다.

두 요소가 서로 다르다면, 그 요소들 사이의 절대 차이를 계산하여 diffs 리스트에 추가(append)합니다.

마지막으로 diffs 리스트의 모든 값의 합을 구합니다. 이때 각 쌍은 두 번씩 계산되므로, 최종 합을 2로 나누어 원하는 결과값을 얻고 반환합니다.

예제 코드

def sumPairs(lst):
    diffs = []
    for i, x in enumerate(lst):
        for j, y in enumerate(lst):
            if i != j:
                diffs.append(abs(x-y))
    return int(sum(diffs)/2)
# Driver program
lst = [22,3,55,43]
print(sumPairs(lst))

실행 결과

177

위 코드에서 사용된 모든 변수와 함수는 전역 범위(global scope)에서 선언되며, 실행 흐름은 다음과 같습니다.

  • 리스트 [22, 3, 55, 43]의 모든 서로 다른 위치의 요소 쌍에 대해 절대 차이를 계산합니다.
  • 예를 들어 |22-3|=19, |22-55|=33, |22-43|=21, |3-55|=52, |3-43|=40, |55-43|=12 입니다.
  • 각 쌍은 순서가 바뀐 형태로 한 번 더 계산되므로 총합을 2로 나누면 결과값 177을 얻게 됩니다.

결론

이 글에서는 enumerate() 함수와 이중 반복문을 활용하여 리스트 내 모든 쌍 사이의 절대 차이의 합을 구하는 방법을 살펴보았습니다. 이 접근 방식은 구현이 간단하고 직관적이라는 장점이 있으며, 중복 계산된 값을 2로 나누어 보정하는 과정만 주의하면 누구나 쉽게 적용할 수 있습니다.