문제

 

풀이 코드

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 를 이용해 한줄로 깔끔하게 풀어내신것도 감탄이 나왔다!

+ Recent posts