문제(출처: 프로그래머스)

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

 

제한 사항

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

▶ 내가 푼 방식

//내가 작성한 코드
function solution(numbers) {
    let max = -10000*10000;
    for (let i =0; i < numbers.length; i ++){
        for (let j = 0; j < numbers.length; j++){
            if ((i!==j) && (numbers[i] * numbers[j] > max)) {
                max = numbers[i] * numbers[j];
            }
        }
    }
    return max;
}

 

 다른 유저가 푼 방식

// 유저 1
function solution(numbers) {
    const N = numbers.length;

    numbers.sort((a, b) => a - b);    // 오름차순 정렬

    return Math.max(
        numbers[N - 1] * numbers[N - 2],  // 가장 큰 두 수의 곱
        numbers[0] * numbers[1]           // 가장 작은 두 수(가장 큰 음수 두 개)의 곱
    );
}

// 유저 2
function solution(numbers) {
    var answer = [];
    for(let i = 0; i < numbers.length - 1; i++){
        for(let j = i + 1; j < numbers.length; j++){
            answer.push(numbers[i] * numbers[j]);
        }
    }
    return Math.max(...answer);
}

 

 배운 것들

     - 제한 사항을 깊게 고려하지 않아서 계속 오류가 났다. 문제를 풀때 꼭 제한 사항도 염두에 두자 

     - 오름차순으로 정렬하는 방법 : numbers.sort((a, b) => a - b); 

         = 원리 :  기준을 a 로 잡아서 작은 숫자(값)이 앞으로
                 "a  < b" 인 경우  →  a - b = 음수   a 가 b 보다 으로 배치 ( 작은 값이 앞으로)

                 "a  > b" 인 경우  →  a - b = 양수   a 가 b 보다 로 배치

                 "a  = b" 인 경우  →  a - b = 0   → a 와 b 위치 그대로

     - 내림차순으로 정렬하는 방법 : numbers.sort((a, b) => b - a); 

         = 원리 :  기준을 b 로 잡아서 큰 숫자(값)이 앞으로
                 "b  < a" 인 경우  →  b - a = 음수   b 가 a 보다 로 배치 (= a 가 으로 배치)

                 "b  > a" 인 경우  →  b - a = 양수   b 가 a 보다 으로 배치 (=a 가 로 배치)

                 "a  = b" 인 경우  →  a - b = 0   → a 와 b 위치 그대로

+ Recent posts