오늘의 TIL (Today I Learned)

문제 분석

  • 주어진 리스트 numbers에서 두 수를 곱했을 때 가장 큰 값을 구하는 문제였습니다.
  • 주요 고려사항:
    1. 양수와 음수의 조합에 따라 결과값이 달라질 수 있음.
    2. 음수 두 개를 곱한 값이 가장 큰 곱을 만들 가능성도 고려해야 함.

로직 설계

  1. 리스트를 정렬:
    • 내림차순 정렬을 통해 가장 큰 두 수를 선택.
    • 오름차순 정렬을 통해 가장 작은 두 수를 선택.
  2. 음수 처리:
    • 음수가 두 개 이상일 경우, 작은 두 수를 곱한 값도 최댓값 후보가 될 수 있음.
  3. 최댓값 계산:
    • 가장 큰 두 수를 곱한 값과 가장 작은 두 수를 곱한 값을 비교해 최댓값을 반환.

놓친 부분

  1. 문제에서 요구한 핵심:
    • 문제는 최댓값을 구하는 것에 집중하므로, 음수의 개수를 세거나 복잡한 조건 분기는 불필요했음.
    • 단순히 큰 수 2개와 작은 수 2개의 곱 중 최댓값만 비교하면 됐음.
  2. 내장 함수 활용 미숙:
    • max()를 활용하면 두 값 중 큰 값을 간단히 구할 수 있었지만, 이를 즉시 떠올리지 못했음.

원래 코드

def solution(numbers):
    #내림차순으로 정렬하기 
    numbers = sorted(numbers, reverse=True)
    
    #음수의 개수에 따라 다르게 비교 
    numbers_2 = sorted(numbers)
    sliced_numbers = numbers_2[0:2] #최솟값 두 개 고르기
    rlt = 0 #곱한 값을 담을 빈 변수 
    for i in sliced_numbers: 
        rlt*=i 
        #음수가 한 개인 경우 
        if rlt <0: 
            return  numbers[0] * numbers[1] 
        
        #음수가 두 개인 경우 
        else :
            minus_rlt = sliced_numbers[0]*sliced_numbers[1]
            rlt = numbers[0] * numbers[1]
            if minus_rlt> rlt:
                return minus_rlt
            else:
                return rlt 
    
    
    return answer

 

개선된 코드

def solution(numbers):
    # 리스트를 정렬
    numbers = sorted(numbers)
    
    # 가장 큰 두 수와 가장 작은 두 수의 곱 비교
    max_product = max(numbers[0] * numbers[1], numbers[-1] * numbers[-2])
    
    return max_product

💡 배운 점

  1. 문제의 요구사항을 명확히 파악하자.
    • 복잡한 로직보다 문제의 핵심에 집중하여 무엇을 구해야 하는지 제대로 이해하는 것이 중요.
  2. 효율적인 내장 함수 활용:
    • max(), sorted() 같은 내장 함수를 통해 계산을 간소화할 수 있음.
    • 과정을 단순화하면서도 정확성을 높이는 방법을 떠올리도록 노력.
  3. 불필요한 로직은 배제:
    • 불필요한 조건 분기나 복잡한 계산 과정을 줄이면 코드가 더 깔끔하고 직관적으로 변함.

포인트 정리

  • 문제 풀이 과정의 단순화: 핵심 목표에만 집중하자.
  • 내장 함수 학습 및 활용: 익숙하지 않다면 미리 학습하고 필요할 때 떠올릴 수 있도록 연습하자.
  • 기초가 답이다: 효율적인 풀이법은 대부분 간단한 로직과 기초 개념에서 나온다.

+ Recent posts