[Lv.1]최소직사각형
문제 : https://programmers.co.kr/learn/courses/30/lessons/86491
🔶내가 한 방법
- 이중배열을 돌면서 배열 중
젤 큰 숫자를 배열num1에 , 작은 숫자를 배열num2에 넣음 - num1과 num2 중 젤 큰 숫자 1개씩 추출
- 각 수를 곱한 결과를 반환함
function solution(arr) {
const num1 = [];
const num2 = [];
for (let i = 0; i < arr.length; i += 1) {
// arr[i][0]와 arr[i][1]를 비교해서, 큰 수를 num1에 넣기
if (arr[i][0] > arr[i][1]) {
num1.push(arr[i][0]);
num2.push(arr[i][1]);
} else {
num1.push(arr[i][1]);
num2.push(arr[i][0]);
}
}
return Math.max(...num1) * Math.max(...num2);
}
// 실행코드
console.log(solution([[60, 50],[30, 70],[60, 30],[80, 40],]),); // 4000
console.log(solution([[10, 7],[12, 3],[8, 15],[14, 7],[5, 15],]),); // 120
console.log(solution([[14, 4],[19, 6],[6, 16],[18, 7],[7, 11],]),); // 133
🔶다른 사람 방법
- 방법1 -reduce로 돌면서 가로,세로의 최대값만 배열에 담아 추출.
function solution(arr) {
const [x, y] = arr.reduce(
(acc, cur) => {
return [
Math.max(acc[0], Math.max(...cur)),
Math.max(acc[1], Math.min(...cur)),
];
},
[0, 0],
);
return x * y;
}
- 방법2 - 이중배열을 오름차순으로 정렬시킨 후, forEach로 순회하면서 젤 큰 수를 뽑아냄.
function solution(arr) {
// 1.이중배열 구조를 유지한 채, 안에있는 숫자를 오름차순으로 정렬함
const newArr = arr.map(([a, b]) => [Math.max(a, b), Math.min(a, b)]);
// 2.이중배열을 돌면서 인덱스 0,1별로 젤 큰수를 maxSize배열에 담음
const maxSize = [0, 0];
newArr.forEach((el) => {
maxSize[0] = Math.max(maxSize[0], el[0]);
maxSize[1] = Math.max(maxSize[1], el[1]);
});
// 3.maxSize배열의 각 수를 곱하여 반환.
return maxSize[0] * maxSize[1];
}
🔶피드백
- 구조분해할당을 잘 활용하자!
- map에서 배열을 반환하면, 최종적으로 이중배열이 만들어짐.
Author And Source
이 문제에 관하여([Lv.1]최소직사각형), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jhplus13/Lv.1최소직사각형저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)