[프로그래머스 | JavaScript] 최소직사각형

728x90
반응형

(1) 내 풀이 (제출)

function solution(sizes) {
  
    let w = [];
    let h = [];

    sizes.map(([s1, s2]) => {
        if (s1 > s2) {
            w.push(s1);
            h.push(s2);
        } else {
            w.push(s2);
            h.push(s1);
        }
    });
    return Math.max(...w) * Math.max(...h);
}
1. 배열 w와 h비교해서 큰 숫자는 w / 작은 숫자는 h
2. w(큰숫자) max * h(작은숫자) max 구하기

 

=> 핵심은 배열 [0]과 [1]을 비교해서 큰 수와 작은수로 구분후 각각의 최대값을 구하는 것

 

 

(2)  내 풀이 (미제출)--> 실패함 (이렇게 풀 필요가 없었음😢😢)

function solution(sizes) {
  

  //1 : flat()으로 1차원배열로 풀기 + 중복없애기(set) + 최대값(max): 배열 스프레드로 풀기
  //Max = 80
  let Max = [...new Set(sizes.flat())];
  Max = Math.max(...Max);

  //2: 반복문 + (가로*세로) = 새로운 배열 생성 + 세로길이만 새로운 배열 생성 (newArr2)
  //newArr = [ 3000, 2100, 1800, 3200 ]
  //newArr2 = [ 50, 70, 30, 40 ]
  let newArr = [];
  let newArr2 = [];
  for (let i = 0; i < sizes.length; i++) {
    newArr.push(sizes[i][0] * sizes[i][1]);
    newArr2.push(sizes[i][1]);
  }

  //3.newArr의 최대값 + 세로길이 배열 정렬
  //newArrMax= 3200
  let newArrMax = Math.max(...newArr);
  newArr2.sort((a, b) => a - b);

  //4. 1번 * (size h 오름차순 정렬) >= 3번
  //Max = 80
  //newArr2= [ 30, 40, 50, 70 ]
  //newArrMax  =3200
 
  return Max * newArr2[newArr2.length - 1];
[풀이]
  1. size의 w,h 중에서 max값 찾기 --> array.flat() 사용
  ▶ flat()으로 1차원배열로 풀기 + 중복없애기(set) + 최대값(max): 배열 스프레드로 풀기
  2. size의 인덱스마다 곱한 값 새로운 배열로 재생성
  3. 새로운 배열에서 최대값 찾기
  4. 1번 * (size h 오름차순 정렬) >= 3번
  5. 1번 * 나온값 => return

 

==> flat() + set 값을 활용해서 1차원 배열과 중복 없애서 나온 최대값 * 인덱스[1]의 값 중 한개를

인덱스 [0]과 [1]을 곱해서 나온 최대값을 비교해서 출력하려고했다.

생각을 잘못해서 시간을 너무 썼지만, 그래도 flat()과 set을 활용해 볼 수 있었다.

 

 

끝.

반응형