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

Python 리스트의 리스트에서 삼각 부등식 만족 여부 확인하기

삼각형에서 두 변의 길이의 합은 항상 나머지 한 변의 길이보다 큽니다. 이를 삼각 부등식(triangle inequality)이라고 합니다. 이번 글에서는 Python의 리스트 안에 담긴 여러 개의 서브리스트(리스트의 리스트) 중에서 삼각 부등식을 만족하는 서브리스트를 찾는 방법을 알아보겠습니다.

for 반복문과 비교 연산자 활용

가장 기본적인 방법은 for 반복문을 사용하는 것입니다. 먼저 모든 서브리스트를 오름차순으로 정렬한 뒤, 각 서브리스트에서 가장 짧은 두 변의 합이 가장 긴 변보다 큰지 확인합니다. 조건을 만족하면 해당 서브리스트를 출력합니다.

예제 코드

Alist = [[3, 8, 3], [9, 8, 6]]

# 리스트의 리스트 내 서브리스트 정렬
for x in Alist:
    x.sort()

# 삼각 부등식 확인
for e in Alist:
    if e[0] + e[1] > e[2]:
        print("삼각 부등식을 만족하는 서브리스트:", e)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

삼각 부등식을 만족하는 서브리스트:
[6, 8, 9]

리스트 컴프리헨션 활용

좀 더 파이썬다운 방식으로는 리스트 컴프리헨션(list comprehension)을 사용할 수 있습니다. 이 방법 역시 먼저 서브리스트들을 정렬한 후, 컴프리헨션을 통해 각 서브리스트를 순회하면서 삼각 부등식을 만족하는 항목만 한 번에 필터링합니다.

예제 코드

Alist = [[3, 8, 3], [9, 8, 6]]

# 리스트의 리스트 내 서브리스트 정렬
for x in Alist:
    x.sort()

# 삼각 부등식 확인
result = [(x, y, z) for x, y, z in Alist if (x + y) > z]
print("삼각 부등식을 만족하는 서브리스트:\n", result)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

삼각 부등식을 만족하는 서브리스트:
[(6, 8, 9)]

정리

두 방법 모두 세 변의 길이를 오름차순으로 정렬한 뒤, 가장 짧은 두 변의 합과 가장 긴 변을 비교한다는 동일한 원리에 기반합니다. 데이터 양이 많거나 조건이 복잡해질 경우에는 리스트 컴프리헨션이 코드를 더 간결하게 유지해 주므로 유용합니다. 반면 초보자에게는 for 반복문 방식이 로직을 단계별로 이해하는 데 더 직관적일 수 있습니다.