프로그래머스 최소 직사각형

김금동·2021년 11월 12일
0

알고리즘

목록 보기
10/12

https://programmers.co.kr/learn/courses/30/lessons/86491

명함을 만들어보자

function solution(sizes) {
  //sizes의 하나의 배열size들에서 계속 갱신할 길이

  //하나뽑고 시작
  let size = sizes.pop();
  let bigSize = 0;
  let smallSize = 0;
  //명함 긴쪽,짧은쪽 으로 통일하기 긴쪽=bigSize,짧은 쪽=smallSize 
  if (size[0] >= size[1]) {
    bigSize = size[0];
    smallSize = size[1];
  } else {
    bigSize = size[1];
    smallSize = size[0];
  }
  let maxBigSize = bigSize;
  let maxSmallSize = smallSize;
  while (sizes.length) {
    //sizes의 한 배열의 긴쪽 = bigSize1,짝은쪽 = smallSize1
    let bigSize1 = 0;
    let smallSize1 = 0;
    // sizes의 뒤에서 부터 배열하나 뽑음
    let size1 = sizes.pop();
    if (size1[0] >= size1[1]) {
      bigSize1 = size1[0];
      smallSize1 = size1[1];
    } else {
      bigSize1 = size1[1];
      smallSize1 = size1[0];
    }
    maxBigSize = Math.max(maxBigSize, bigSize1);
    maxSmallSize = Math.max(maxSmallSize, smallSize1);
  }
  return maxBigSize * maxSmallSize;
}

긴쪽 짧은쪽 맞추는 것을 한 함수로 표현하면 한 번만 쓰면 되기 때문에 중복을 없애보자

// 카드정렬함수
function cardSpin(size) {
  let bigSize = 0;
  let smallSize = 0;
  if (size[0] >= size[1]) {
    bigSize = size[0];
    smallSize = size[1];
  } else {
    bigSize = size[1];
    smallSize = size[0];
  }
    return [bigSize, smallSize]
}

function solution(sizes) {
  //하나뽑고 시작
  let size = sizes.pop();
  const [bigSize, smallSize] = cardSpin(size);
  let maxBigSize = bigSize;
  let maxSmallSize = smallSize;
  while (sizes.length) {
    // sizes의 뒤에서 부터 배열하나 뽑음
    let size1 = sizes.pop();
    let [bigSize1, smallSize1] = cardSpin(size1);
    maxBigSize = Math.max(maxBigSize, bigSize1);
    maxSmallSize = Math.max(maxSmallSize, smallSize1);
  }
  return maxBigSize * maxSmallSize;
}

이것도 한줄로 표현할 수 있었네ㅋㅋ

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의 accumlator(첫번째 파라미터)가 현재값과 이전값을 비교할때도 쓰임이 가능하구나 라는 생각을 하게 만드는 풀이
이전값에 더하거나 빼는 것만 생각했는데 여기서는 Math.max나 Math.min으로 비교하면서 넣어주었다.

profile
나원래chu해

0개의 댓글