문제(출처: 프로그래머스)
정수 배열 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 위치 그대로
'프로그래밍 > 코딩연습' 카테고리의 다른 글
[ JS 코딩연습 ] 2024/04/13 : 3.암호 해독 (0) | 2024.04.13 |
---|---|
[ JS 코딩연습 ] 2024/04/12 : 2. 삼각형의 완성조건 (0) | 2024.04.13 |
[ JS 코딩연습 ] 2024/04/11 : 3. 숨어 있는 숫자의 덧셈 (0) | 2024.04.11 |
[ JS 코딩연습 ] 2024/04/11: 1. 모음제거 (0) | 2024.04.11 |
[ JS 코딩연습 ] 2024/04/10 : 3. 최댓값 만들기 (0) | 2024.04.11 |