이 글에서는 주어진 문제를 해결하기 위한 풀이 방법과 접근 방식에 대해 알아보겠습니다.
문제 정의
리스트가 입력으로 주어졌을 때, 리스트 내 모든 쌍(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로 나누어 보정하는 과정만 주의하면 누구나 쉽게 적용할 수 있습니다.