프로그래머스/파이썬_입문

최댓값 만들기 (2)

싱싱한복초이 2024. 11. 22. 14:56

https://school.programmers.co.kr/learn/courses/30/lessons/120862

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

[문제 설명]

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

 

제한사항

  • -10,000 ≤ numbers의 원소 ≤ 10,000
  • 2 ≤ numbers 의 길이 ≤ 100

[나의 풀이]

def solution(numbers):
    plus, minus = [], []
    
    # 양수와 음수 나누기
    for i in numbers:
        if i > 0:
            plus.append(i)
        else:
            minus.append(i)
            
    # 정렬
    plus.sort(reverse=True)
    minus.sort(reverse=True)
    
    # 최댓값 계산
    if len(plus) >= 2 and len(minus) >= 2:
        return max(plus[0] * plus[1], minus[0] * minus[1])
    elif len(plus) >= 2:
        return plus[0] * plus[1]
    elif len(minus) >= 2:
        return minus[0] * minus[1]
    else:
        return plus[0] * minus[0]  # plus와 minus 모두 1개의 원소만 있는 경우

 

주의1) 처음에 이렇게 코드를 작성했는데 틀렸다.

plus = plus.sort(reverse=true)
minus = minus.sort(reverse=true)

plus.sort(reverse=true)와 minus.sort(reverse=true)에서 sort 메서드는 리스트를 제자리에서 정렬하고 반환값으로 None을 돌려주기 때문. 따라서 plus와 minus가 None이 되어 이후의 코드에서 오류가 발생한다.

 

주의2) True와 False

  plus = plus.sort(reverse=true)
  minus = minus.sort(reverse=true)

Python에서는 True와 False는 대문자로 시작해야 한다. reverse=true는 reverse=True로 수정해야 맞다.

 

주의3) 마지막에 최댓값을 계산하기 위한 경우의 수를 나눌때 이후의 조건들을 간소화하기 위해

if len(plus) >= 2 and len(minus) >= 2:
        return max(plus[0] * plus[1], minus[0] * minus[1])

이 조건부터 쌓아올리는게 좋다

 

[다른 풀이]

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

sorted(numbers)는 numbers를 정렬한 값을 return 해주고, numbers.sort()는 numbers 자체를 정렬하기때문에 sorted를 사용한 경우에는 변수에 재할당해주어야 한다.

 

from itertools  import combinations as comb

def solution(numbers):
    an_list=[]
    for i,j in comb(numbers,2):
        an_list.append(i*j)
    return max(an_list)
def solution(numbers):

    return max([k * j for i, k in enumerate(numbers) for j in numbers[i + 1:]])

'프로그래머스 > 파이썬_입문' 카테고리의 다른 글

다항식 더하기 + f-string  (0) 2024.11.28
캐릭터의 좌표  (0) 2024.11.23
직사각형 넓이 구하기  (0) 2024.11.21
잘라서 배열로 저장하기  (0) 2024.11.19
머쓱이보다 키 큰 사람  (0) 2024.11.18