[프로그래머스] LV.0 최댓값 만들기(2)

seho·2023년 2월 13일
0

codetest

목록 보기
3/17
post-thumbnail

문제

정수 배열 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

풀이

  1. 중복이 안되게 모든 배열 요소들의 값을 곱해주고 빈 array 에 넣어 최댓값을 추출한다.
  2. 입력된 배열을 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 값이 나오는 경우가 있었다.
profile
develop my'self and sw

0개의 댓글