문제
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
제한사항
- 10,000 ≤ numbers의 원소 ≤ 10,000
- 2 ≤ numbers 의 길이 ≤ 100
입출력 예시
numbers result
[1, 2, -3, 4, -5] 15
[0, -31, 24, 10, 1, 9] 240
[10, 20, 30, 5, 5, 20, 5] 600
풀이
- 중복이 안되게 모든 배열 요소들의 값을 곱해주고 빈 array 에 넣어 최댓값을 추출한다.
- 입력된 배열을 sort 하여 음수, 양수의 가장 작고 큰 값을 곱해준 후 최댓값을 추출한다.
풀이 1
def solution(numbers):
array = []
for num1 in numbers:
numbers.remove(num1)
for num2 in numbers:
array.append(num1*num2)
return max(array)
- 빈 배열 array를 정의
- 입력된 배열을 2번 for 문을 통해 요소를 추출 후 곱해주는데 여기서 1번 째 for 문에서 사용된 값은 2번 째 for 문에서 삭제 후 진행한다.
- 빈 배열 array에 모든 곱의 값을 넣어준 후
- max() 함수를 사용해 최대 값을 추출한다.
풀이 2
def solution(numbers):
numbers.sort()
return max(numbers[0] * numbers[1], numbers[-1] * numbers[-2])
- 입력된 배열을 sort() 함수로 올림차순 정렬해 준다.
- 이렇게 되면 음의 정수부터 차례대로 정렬되는데 음의 정수끼리 곱해주게 되면 양의 정수가 나와 최댓 값이 될 수 있으므로 비교해주어야 한다.
- 배열의 인덱스는 최소값 두 개인 [0], [1] 과 최대값인 [-1], [-2]를 해주면 된다.
오답노트
- 풀이 2번에서 각 값들의 곱을 비교하여 if 문으로 최댓값을 구하려 했는데 null 값이 나오는 경우가 있었다.