문제정보
가로길이,세로길이가 담긴 배열로 이루어진 2차원 배열이 주어지는데모든 명함을 수납할 수 있는 지갑을 만들어야하는군요그런데 2번명함같이 세로가 긴 명함은 가로로 눕혀 수납할 수 있다고 합니다.
그래서 저는 모든 배열을 내림차순으로 정렬시켜서 푸는 방법을 생각했습니다.
예시
sizes result
[[60, 50], [30, 70], [60, 30], [80, 40]] 4000
[[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120
[[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133
정답은 직사각형의 넓이 형태로 반환하면 되는군요
나의풀이
function solution(sizes) {
let row = []
let column = []
sizes.forEach(ele => {
let sorter = ele.sort((a,b) => b - a)
row.push(sorter[0])
column.push(sorter[1])
})
return Math.max(...row) * Math.max(...column)
}
변수를 좀 더 적게 선언하고 풀 방법이 있을 것 같은데 일단은 위와 같이 구현했습니다.forEach를 통해 각 요소에 접근한다음 sort를 통해 정렬을 해줬습니다.이때 sort()는 내림차순으로하든 오름차순으로하든 상관없겠네요
정렬시켜준다음 각 요소를 row와 column에 push해주고 두 배열의 최댓값끼리 곱하면그게 모든 명함을 수납할 수 있는 지갑의 크기일것입니다.
아쉬운 건 변수를 불필요하게 선언하지 않았나 하는 것이었습니다.
다른사람의 풀이
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];
}
map을 이렇게 사용하면 2차원배열에도 사용할 수 있군요... map에 삼항연산자를 이용해서
정렬을 시켜준다음 forEach로 max값을 찾아줬네요
반응형
'programmers' 카테고리의 다른 글
[Programmers Level 0 해시] 폰켓몬 Javascript (0) | 2022.12.09 |
---|---|
[Programmers Level 2 탐욕법] 구명보트 Javascript (0) | 2022.12.08 |
[Programmers Level 0] 3진법 뒤집기 Javascript (0) | 2022.12.07 |
[Programmers Level 1] [1차]비밀지도 Javascript (0) | 2022.12.07 |
[Programmers Level 0] 캐릭터의 좌표 Javascript (0) | 2022.12.02 |