나 개발자 할래요
[JS]최소직사각형 본문
function solution(sizes) {
let arr = sizes.map(sizes => sizes[0] > sizes[1] ? [sizes[0], sizes[1]] : [sizes[1], sizes[0]]);
let width = [];
let height = [];
for(let i = 0; i < arr.length; i++) {
width.push(arr[i][0]);
height.push(arr[i][1]);
}
return Math.max(...width) * Math.max(...height);
}
let arr = sizes.map(sizes => sizes[0] > sizes[1] ? [sizes[0], sizes[1]] : [sizes[1], sizes[0]]);
`sizes` 배열의 각 요소는 `[width, height]`형식의 배열
`map` 메서드를 사용하여 각 명함의 가로와 세로 크기를 비교한 후
=> 큰 값을 첫 번째 요소로, 작은 값을 두 번째 요소로 하는 새로운 배열을 만듦
모든 명함의 크기가 `[큰 값, 작은 값]` 형태의 배열 `arr`에 저장
`map` 메서드
array.map(callback(currentValue, index, array), thisArg)
calback : 새로운 배열 요소를 생성하는 함수
(이 함수는 각 요소에 대해 한 번 호출됨)
currentValue : 처리할 현재 요소
index (선택 사항) : 처리할 현재 요소의 인덱스
array (선택 사항) : `map` 메서드를 호출한 배열
thisArg (선택 사항) : calback 함수 내부에서 `this`로 사용할 값
let width = [];
let height = [];
for(let i = 0; i < arr.length; i++) {
width.push(arr[i][0]);
height.push(arr[i][1]);
}
`widh`와 `height`라는 두 개의 빈 배열을 만듦
`arr` 배열을 순회하면서
각 명함의 가로 크기를 `width` 배열에, 세로 크기를 `height` 배열에 추가
`Math.max` 함수를 사용하여
`width`배열에서 가장 큰 값과 `height`배열에서 가장 큰 값 찾음
이 두 최대값을 곱하여 모든 명함을 담을 수 있는 가장 작은 지갑의 크기 반환
다른 사람 풀이
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];
}
'개발자 되는 법... > 코딩테스트...' 카테고리의 다른 글
[JS] 숫자 문자열과 영단어 (0) | 2024.07.10 |
---|---|
[JS] 시저 암호 (0) | 2024.07.10 |
[JS] 크기가 작은 부분 문자 (1) | 2024.07.05 |
[JS] 삼총사 (0) | 2024.07.04 |
[JS] 이상한 문자 만들기 (0) | 2024.07.04 |