Python/Python 문제 풀이

💡파이썬에서 두 수 곱의 최댓값 구하기: 정렬 vs 루프 vs remove 방식 비교

THINKRUNNER 2025. 4. 30. 21:42
파이썬에서 두 수 곱의 최댓값 구하기: 정렬 vs 루프 vs remove 방식 비교

💡 파이썬에서 두 수 곱의 최댓값 구하기: 정렬 vs 루프 vs remove 방식 비교

문제 소개 🚀

리스트에 있는 숫자들 중, 두 수를 곱했을 때 가장 큰 값을 찾아야 한다면 어떤 방법이 가장 좋을까요? 저는 다음과 같은 세 가지 방법을 고민해봤습니다:

1. 정렬을 이용한 방법 📊

def highest_product(numbers):
    s_numbers= sorted(numbers)
    a = s_numbers[0] * s_numbers[1]
    b = s_numbers[-2] * s_numbers[-1]
    return max(a, b)

Time Complexity: sorted()는 평균적으로 O(n log n)입니다. 리스트 크기가 커질수록 느려지겠죠.

2. 루프를 이용한 최적화 방법 🏎️

def highest_product(numbers):
    min1 = min2 = float('inf')
    max1 = max2 = float('-inf')

    for num in numbers:
        if num <= min1:
            min2 = min1
            min1 = num
        elif num <= min2:
            min2 = num

        if num >= max1:
            max2 = max1
            max1 = num
        elif num >= max2:
            max2 = num

    return max(min1 * min2, max1 * max2)

한 번의 루프로 끝나는 O(n) 알고리즘입니다. 성능 면에서는 최고죠.

3. remove()를 이용한 방식 🤔

def highest_product(numbers):
    a = min(numbers)
    numbers.remove(a)
    b = min(numbers)
    numbers.append(a)

    c = max(numbers)
    numbers.remove(c)
    d = max(numbers)
    numbers.append(c)

    return max(a * b, c * d)

이 방법은 min()remove()가 반복되며 리스트를 계속 수정하므로, 시간복잡도는 여전히 O(n)이지만 느릴 수 있습니다. remove()는 내부에서 요소를 하나하나 찾아 제거하고, 이후 요소를 앞으로 당기기 때문입니다.

🔍 코드 비교와 평가

파이썬 철학 "Simple is better than complex."에 충실한 방법은 바로 2번 루프 방식입니다. 이유는 다음과 같습니다:

  • 정렬 방법은 간단하지만 느립니다. O(n log n)
  • remove()는 리스트 변형 위험과 복구 작업이 필요합니다.
  • 루프 방식은 빠르고 안전하며, 원본 리스트도 건드리지 않아요.
한 줄 정리 🧾: 루프 방식이 가장 빠르고, 가장 깔끔하며, 가장 파이썬스럽다고 GPT가 알려주네요.

float('inf')와 float('-inf')란? ♾️

float('inf')는 파이썬에서 양의 무한대를 의미하는 실수형 상수입니다. 마찬가지로 float('-inf')는 음의 무한대죠.

이 값들은 비교 연산에 아주 유용합니다:

  • any_number < float('inf') → 항상 True
  • any_number > float('-inf') → 항상 True

그래서 최소값/최대값을 갱신할 때 기준값으로 사용하기 딱 좋습니다.

✅ 한 줄 요약 & 결론

핵심 요약 ✨: "정렬보다 루프가, remove보다 안전한 방식이 더 Pythonic하다."

문제 해결은 단순할수록 좋습니다. Simple is better than complex. 라는 파이썬 철학이 잘 반영된 예제였죠. 앞으로도 복잡한 정렬보다, 명확하고 빠른 루프를 먼저 떠올려 보세요!