3은로그

[프로그래머스] Lv.1 최소직사각형 본문

코딩테스트

[프로그래머스] Lv.1 최소직사각형

3은 2024. 1. 7. 23:48
728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제

 

 

 

 

코드

 

function solution(sizes) {
    var answer = 0;
    var maxIdx0 = 0;
    var maxIdx1 = 0;
    
    for(let i = 0; i < sizes.length; i++){
        if(sizes[i][0] < sizes[i][1]){
            [sizes[i][0], sizes[i][1]] = [sizes[i][1], sizes[i][0]];
        }
    }
    
    maxIdx1 = Math.max(...sizes.map(v => v[0]));
    maxIdx2 = Math.max(...sizes.map(v => v[1]));
    
    return maxIdx1 * maxIdx2;
}

 

 

1.  명함을 가로와 세로로 두 방향으로 넣을 수 있기 때문에 계산을 쉽게하기 위해 가로에는 큰 변의 길이를 세로에는 작은 변의 길이를 저장한다.

2. 명함의 가로 길이 중 가장 긴 것과 세로 길이 중 가장 긴 것을 찾아 곱한다.

 

 

 

이중 배열에서 최대값 찾기_spread 연산자 사용

 

Math.max(...sizes.map( v => v[0]));

 

 

  • Math.max()

Math.max() 함수는 파라미터로 입력받은 숫자들 중 최대값을 구해서 리턴하는 함수이다.

이 함수들을 사용해서 배열의 최대값을 구하려면, 배열의 원소들을 하나씩 꺼내서,

Math.max() 함수의 파라미터로 전달하면 된다.

Spread Operator(전개 연산자)를 사용하여 파라미터로 전달할 수 있다. 

Spread Operator는 "..." 점 세개로 표현한다. 배열의 원소들이 펼쳐지는 효과가 있다.

 

 

  • Map

map() 함수는 배열을 순회하며 지정된 콜백 함수를 적용하여 각 요소를 변환하고, 그 변환된 값을 모아서 새로운 배열로 반환하는 역할을 수행한다.

따라서 위 코드는 이차원 배열에서 0번째 인덱스의 배열 값만 모아서 반환한다.

Math.max(...sizes.map( v => v[1]));은 이차원 배열에서 1번째 인덱스의 배열 값만 모아서 반환한다.

 

 

이 방법으로 이중배열에서 최대값을 찾을 수 있다.

 

 

 

다른 방법

 

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과 구조분해할당을 사용해서 세로의 길이가 더 길면 세로와 가로의 자리를 바꾼다.
  • forEach를 사용해서 배열을 순회하며 가장 길이가 긴 세로와 가로를 찾아 저장한다.
  • 두 숫자를 곱한다.