파이썬 알고리즘 문제 풀이

[프로그래머스] Lv0.최댓값 만들기 (2) 파이썬

gogi masidda 2024. 1. 15. 18:22
  • 최댓값 만들기 (2)
문제 설명

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.

 

내 풀이

def solution(numbers):
    answer = []
    pos = []
    neg = []
    if len(numbers) == 2:
        return numbers[0] * numbers[1]
    for n in numbers:
        if n > 0:
            pos.append(n)
        elif n < 0:
            neg.append(n)
    pos.sort()
    neg.sort()
    if len(pos) >= 2:
        answer.append(pos[-1] * pos[-2])
    if len(neg) >= 2:
        answer.append(neg[-1] * neg[-2])
    if len(answer) == 0:
        return 0
    return max(answer)

반례가 계속 생겨서 긴 코드가 되었다.

 

다른 사람 풀이

def solution(numbers):
    numbers = sorted(numbers)
    return max(numbers[0] * numbers[1], numbers[-1]*numbers[-2])

굳이 양수 배열 음수 배열로 나눌 필요가 없이 정렬을 하면 됐다.

앞에서 두개는 음수 중 가장 절댓값이 큰거, 뒤에서 두개는 양수 중 가장 절댓값이 큰게 되고, 배열의 길이가 2인 경우도 모두 해결이 되며 0이 포함된 배열도 해결이 된다...

728x90