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

stella·2023년 1월 8일
0

Algorithm

목록 보기
3/40
post-thumbnail

문제

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


1. 처음 생각한 로직

원소 2개를 곱해 최댓값을 구하려면?
1. 양수끼리 곱한다.
2. 음수끼리 곱한다.

  • 음수끼리 곱하면 양수가 된다.
    numbers = [1, 2, -3, 4, -5]
    -3 * -5 = 15

  • 음수인지 양수인지에 따라 값이 최댓값 혹은 최솟값이 될 수가 있다.
    4 * -5 = -20
    2 * 4 = 8
    -3 * -5 = 15

  • 코드를 치다보니 지금 단계에서는 최댓값을 찾는게 별 의미가 없었다. 오히려 로직이 더욱 복잡해지는 것 같아 반복문을 사용하는게 낫겠다는 생각이 들었다.

2. 반복문으로 바꾸자

이중 for문을 이용해 numbersi index 값과 numbersi+1 index 값을 곱해주었다.

function solution(numbers) {
    let calc = [];
    for (let i = 0; i < numbers.length; i++) {
        for (let j = i+1; j < numbers.length; j++) {
            calc.push(numbers[i] * numbers[j]);
  
            console.log(calc)
        }
    }
}

곱한 값들을 빈배열 calc 에 담아서 출력해봤는데 값이 이상하게 나왔다.
곱한 값들이 반복문안에 있어서 그런지 계속 반복되어 출력이 되었다.
나는 마지막에 출력된 배열만 필요한데 말이지...
그럼 마지막 출력된 배열에서 최댓값을 출력해 주면 그게 정답이 되겠다!

function solution(numbers) {
    let calc = [];
    for (let i = 0; i < numbers.length; i++) {
        for (let j = i+1; j < numbers.length; j++) {
            calc.push(numbers[i] * numbers[j]);
          }
    }
    return Math.max(...calc)
}
profile
Frontend Engineer

0개의 댓글