https://school.programmers.co.kr/learn/courses/30/lessons/120862
[문제 설명]
정수 배열 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 |