HanSol's Oak Cask

특정 요소가 다른 모든 요소의 합보다 큰 지 판별하는 방법 본문

알고리즘, 코딩테스트

특정 요소가 다른 모든 요소의 합보다 큰 지 판별하는 방법

HanSol_Lim 2025. 2. 12. 10:46

코딩을 하다 보면 **"리스트(배열)에서 특정 요소가 나머지 모든 요소의 합보다 큰지 확인하는 문제"**를 만나는 경우가 많습니다.
이런 문제를 더 빠르고, 간결하게 해결할 수 있는 방법을 정리해보겠습니다. 🎯


1. 비효율적인 방식 (if 문 여러 개 사용)

가장 흔한 실수는 모든 요소를 각각 비교하는 방식입니다.

arr = [5, 2, 3]

if arr[0] >= arr[1] + arr[2]:
    print("특정 요소가 다른 요소의 합보다 크다.")
elif arr[1] >= arr[0] + arr[2]:
    print("특정 요소가 다른 요소의 합보다 크다.")
elif arr[2] >= arr[0] + arr[1]:
    print("특정 요소가 다른 요소의 합보다 크다.")

문제점:

  • 비효율적 → if 문이 많아질수록 코드가 길어짐.
  • 가독성이 떨어짐 → 한 번에 직관적으로 이해하기 어려움.
  • 확장성 부족 → 요소 개수가 많아지면 비교해야 할 if 문이 더 늘어남.

2. max() 활용 (더 간결한 방식)

max() 함수를 사용하면 리스트에서 가장 큰 값을 한 번에 찾을 수 있음.

arr = [5, 2, 3]

max_value = max(arr)  # 가장 큰 값 찾기
arr.remove(max_value)  # 해당 값을 리스트에서 제거

if max_value >= sum(arr):  # 나머지 요소들의 합과 비교
    print("특정 요소가 다른 요소들의 합보다 크다.")

개선된 점:

  • max()를 사용하여 가장 큰 값을 한 번에 찾음.
  • 리스트에서 해당 값을 제거한 후 나머지 값들의 합과 비교.
  • 확장 가능 → 요소가 더 많아져도 동일한 방식으로 처리 가능.
  • 코드가 짧고 직관적 → 가독성이 높아짐.

3. sort() 활용 (더 직관적인 방법)

리스트를 정렬하면 가장 큰 값이 항상 마지막 요소가 됨.

arr = [5, 2, 3]

arr.sort()  # 정렬하여 가장 큰 값을 마지막 요소로 배치
if arr[-1] >= sum(arr[:-1]):  # 가장 큰 값과 나머지 요소들의 합 비교
    print("특정 요소가 다른 요소들의 합보다 크다.")

장점:

  • sort()를 사용하면 가장 큰 요소가 항상 리스트의 마지막 요소가 됨.
  • 나머지 요소들의 합은 슬라이싱(arr[:-1])을 사용해 간편하게 구할 수 있음.
  • remove() 방식보다 더 효율적이고 직관적.

4. 일반화된 코드 (N개의 요소가 있을 때)

def is_largest_greater_than_others(arr):
    arr.sort()
    return arr[-1] >= sum(arr[:-1])

# 예제 테스트
test_cases = [
    [5, 2, 3],  # 5 >= 2 + 3 → True
    [10, 4, 6, 2],  # 10 >= 4 + 6 + 2 → True
    [8, 3, 2, 2],  # 8 >= 3 + 2 + 2 → False
]

for case in test_cases:
    print(f"{case}: {is_largest_greater_than_others(case)}")

이제 어떤 길이의 리스트든 이 함수를 사용하면 쉽게 판별할 수 있음! 🎯


🚀 결론

방법 코드 길이 가독성 성능 (O)

if 문 여러 개 사용 ❌ 복잡함 O(N)
max() + remove() 사용 중간 ✅ 비교적 직관적 O(N)
sort() + sum() 활용 짧음 ✅ 가장 간결함 O(N log N)

📌 리스트에서 특정 요소가 나머지 요소보다 큰지 확인하려면 sort() 또는 max()를 활용하는 것이 최적의 방법! 🚀
📌 이제 비효율적인 if 문을 줄이고 더 깔끔한 코드로 문제를 해결할 수 있음! 🎯🔥