문제
풀이 코드
function solution(sizes) {
const largeNum = sizes.map((item) => (item[0] < item[1] ? item[1] : item[0]));
const smallNum = sizes.map((item) => (item[0] > item[1] ? item[1] : item[0]));
return Math.max(...largeNum) * Math.max(...smallNum);
}
풀이 과정
20분 정도를 어떻게 풀어야 할지 고민을 했다.
해당 문제는 사고력 문제인거 같았고, 스스로 아무리 고민해도 해결할 수 없을것 같았다.
그래서 구글링을 통해 개념만 파악했다.
해당 문제의 해결 방법은 다음과 같다.
1. 각 2차원 배열 내에서, 각 요소마다 큰수와 작은수가 반드시 나뉘어 진다. ( 명함을 정사각형으로 만들지 않을 뿐더러, 정사각형 이라 하여도 크게 문제는 없다 )
2. 각 배열내에서 큰수와 작은수를 각각 나누어 각각의 배열을 생성해 할당한다.
3. 큰수만 모여있는 배열과 작은수만 모여있는 배열에서의 각각 최대값을 뽑아 두수의 곱을 반환한다
해당 문제를 푸는 과정에서 사고력을 좀 키워야 겠다는 생각이 들었다.
다른사람의 풀이
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;
}
reduce 를 이용해 깔끔히 풀어낸 솔루션도 있지만.
개인적으로 가독성 측면에서 내가 푼 방법이 보기 편하다는 생각을 하게 되었다.
다만, reduce 를 이용해 한줄로 깔끔하게 풀어내신것도 감탄이 나왔다!