오늘의 TIL (Today I Learned)
문제 분석
- 주어진 리스트 numbers에서 두 수를 곱했을 때 가장 큰 값을 구하는 문제였습니다.
- 주요 고려사항:
- 양수와 음수의 조합에 따라 결과값이 달라질 수 있음.
- 음수 두 개를 곱한 값이 가장 큰 곱을 만들 가능성도 고려해야 함.
로직 설계
- 리스트를 정렬:
- 내림차순 정렬을 통해 가장 큰 두 수를 선택.
- 오름차순 정렬을 통해 가장 작은 두 수를 선택.
- 음수 처리:
- 음수가 두 개 이상일 경우, 작은 두 수를 곱한 값도 최댓값 후보가 될 수 있음.
- 최댓값 계산:
- 가장 큰 두 수를 곱한 값과 가장 작은 두 수를 곱한 값을 비교해 최댓값을 반환.
놓친 부분
- 문제에서 요구한 핵심:
- 문제는 최댓값을 구하는 것에 집중하므로, 음수의 개수를 세거나 복잡한 조건 분기는 불필요했음.
- 단순히 큰 수 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
💡 배운 점
- 문제의 요구사항을 명확히 파악하자.
- 복잡한 로직보다 문제의 핵심에 집중하여 무엇을 구해야 하는지 제대로 이해하는 것이 중요.
- 효율적인 내장 함수 활용:
- max(), sorted() 같은 내장 함수를 통해 계산을 간소화할 수 있음.
- 과정을 단순화하면서도 정확성을 높이는 방법을 떠올리도록 노력.
- 불필요한 로직은 배제:
- 불필요한 조건 분기나 복잡한 계산 과정을 줄이면 코드가 더 깔끔하고 직관적으로 변함.
포인트 정리
- 문제 풀이 과정의 단순화: 핵심 목표에만 집중하자.
- 내장 함수 학습 및 활용: 익숙하지 않다면 미리 학습하고 필요할 때 떠올릴 수 있도록 연습하자.
- 기초가 답이다: 효율적인 풀이법은 대부분 간단한 로직과 기초 개념에서 나온다.