문제 설명

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


제한사항

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

입출력 예

numbersresult
[1, 2, 3, 4, 5]20
[0, 31, 24, 10, 1, 9]744

입출력 예 설명

입출력 예 #1

  • 두 수의 곱중 최댓값은 4 * 5 = 20 입니다.

입출력 예 #1

  • 두 수의 곱중 최댓값은 31 * 24 = 744 입니다.

✍ SOLUTION1

const solution = (numbers) => {
    numbers.sort((a, b) => b - a);
    return numbers[0] * numbers[1];
}

/* 내가 처음 작성한 코드이다. numbers를 sort를 사용하여 내림차순 해주고 number의 인덱스로 접근하여 
0번째와 1번째 있는 요소를 곱해주었다. */

✍ SOLUTION2

const solution = (numbers) => {
	numbers.sort((a, b) => a - b);
	return numbers.at(-1) * numbers.at(-2);
}

/* 이건 다른분의 코드를 보다가 at메서드를 처음 보게 되어 공부할 겸 작성해보았다. 
SOLUTION1에서는 sort를 이용해서 내림차순으로 바꿔주고 numbers의 인덱스로 접근해주었는데
at메서드를 사용해서 sort로 오름차순을 해주고 numbers.at(-1)을 작성해주어 
numbers[numbers.length -1]와 같은 코드이지만 더 간결하게 작성해주었다. at 메서드 관련해서
따로 내용을 정리해서 velog에 작성해두었다. */
at() 메서드에 대해 정리한 내용이다. https://velog.io/@eungbi/Array.prototype.at

✍ SOLUTION3

function solution(numbers) {
    return numbers.sort((a,b)=>b-a).slice(0,2).reduce((a,b)=>a*b);
}

/* 이것도 다른분의 코드이다. 제일 간단하게 작성할 수 있는거 같아서 작성해본다.
sort를 이용해서 내림차순을 해준 후 slice를 통해서 0번째 인덱스에서 2번째 인덱스 이전까지
복사 해준 후 reduce를 통해서 곱해주었다. */
const solution = (numbers) => 
numbers.sort((a, b) => b - a).slice(0, 2).reduce((a, b) => a * b);

/* 위의 코드에서 화살표 함수로 변경해주고 return과 중괄호를 생략해주어 더 간략하게 작성한 코드이다. */

✍ SOLUTION4

function solution(numbers) {
    numbers.sort((a, b) => a - b)
    return Math.max(...numbers) * numbers[numbers.length - 2]
}

/* 다른 분의 코드인데 Math.max를 이용해서도 작성하는 방법을 남겨보고 싶어서 작성했다.
numbers를 스프레드 연산자를 이용해서 배열 안에 요소들을 다 분리 시켜 준 후 Math.max로 최대 큰 수를
추출하고 numbers[numbers.length -2]로 두번째로 큰 수를 추출 후 곱해주었다. */
spread 연산자에 대해 정리한 내용이다. https://velog.io/@eungbi/Javascript-SPREAD-%EB%AC%B8%EB%B2%95
const solution = (numbers) => {
    numbers.sort((a, b) => a - b)
    return Math.max(...numbers) * numbers.at(-2);
}

출처 : 프로그래머스 스쿨 | 코딩테스트 연습
https://school.programmers.co.kr/learn/courses/30/lessons/120847

0개의 댓글