제한사항
sizes의 길이는 1 이상 10,000 이하입니다.
sizes의 원소는 [w, h] 형식입니다.
w는 명함의 가로 길이를 나타냅니다.
h는 명함의 세로 길이를 나타냅니다.
w와 h는 1 이상 1,000 이하인 자연수입니다.
생각해본 풀이법.
1.큰 수가 앞으로, 작은 수가 뒤로 가도록 정렬을 해줘야 함. -> for문 사용
2. 최소공배수 구하는 공식으로 가로, 세로 각자 최소공배수를 만들어주는 식을 만듬
3. 가로의 최소공배수와 세로의 최소공배수를 곱해서 return
최소공배수 어떻게 구하더라.. 하고 고민하던 중 갑자기 유레카처럼 스쳐지나간 생각.
근데 최소공배수를 왜 구하지??????? 그냥 각 길이중에 가장 긴 길이 뽑아서 가로 세로 해주면 모든 명함이 들어가잖아?????
최최최종 풀이법
1. 큰 수가 앞으로, 작은 수가 뒤로 가도록 배열을 1차 정렬함 -> for문 사용
2. 각 원소들의 인덱스가 0 , 1인 애들끼리 새로 배열을 만듦 (인덱스 0배열, 인덱스 1배열)
3. 각 배열들을 sort 해서 맨 끝 인덱스 숫자끼리 곱해준다
그래서 만든 답안
function solution(sizes) {
let size1 = [];
let size2 = [];
for(let i = 0; i < sizes.length; i++) {
sizes[i].sort();
size1.push(sizes[i][0])
size2.push(sizes[i][1])
};
size1.sort((a, b) => b - a);
size2.sort((a, b) => b - a);
return size1[0]*size2[0]
}
띠용.... 정답률 무슨일........
아!!!!!!!
(최총답안)
function solution(sizes) {
let size1 = [];
let size2 = [];
for(let i = 0; i < sizes.length; i++) {
sizes[i].sort((a, b) => a - b);
size1.push(sizes[i][0])
size2.push(sizes[i][1])
};
size1.sort((a, b) => b - a);
size2.sort((a, b) => b - a);
return size1[0]*size2[0]
}
sort 위에 있는거 하나 정렬 빼먹음!
코드가 허접한지 1점... 또르르
리듀스와 Math.max&min 사용한 답안
function solution(sizes) {
const [hor, ver] = sizes.reduce(([h, v], [a, b]) => [Math.max(h, Math.max(a, b)), Math.max(v, Math.min(a, b))], [0, 0])
return hor * ver;
}
가독성 좋고 깔끌했던 답안
function solution(sizes) {
const rotated = sizes.map(([w, h]) => w < h ? [h, w] : [w, h]);
let maxSize = [0, 0];
rotated.forEach(([w, h]) => {
if (w > maxSize[0]) maxSize[0] = w;
if (h > maxSize[1]) maxSize[1] = h;
})
return maxSize[0]*maxSize[1];
}