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

yoon Y·2022년 4월 12일
0

알고리즘 문풀

목록 보기
2/6

문제 링크

참고한 힌트

사실상 문제를 보면 가로x세로 길이를 명시해서 더 헷갈리게 만들었다.
사실 어떤 모서리는 가로가 될 수도 있고 세로도 될 수가 있다.

그치만 한 모서리를 가로라고 지정하면 다른 모서리는 세로가 되어야 옳다.
두 개의 모서리를 비교하여 큰 값을 전부 가로 작은 값을 전부 세로로 두면
각 모서리의 길이의 최댓값이 답이 되지않을까?

긴 면을 가로라고 생각하는 것 → 일단 다 카드를 눕혔다고 생각하는 것

내 풀이

function solution(sizes) {
    let maxWidth = 0;
    let maxHeight = 0;
    
    sizes.map(([v1, v2]) => {
        if(v1 >= v2){
           if(maxWidth < v1) maxWidth = v1;
           if(maxHeight < v2) maxHeight = v2;
        } else if(v1 < v2) {
           if (maxWidth < v2) maxWidth = v2;
           if (maxHeight < v1) maxHeight = v1;
    }})
    
    return maxWidth*maxHeight
}

다른 사람 풀이

function solution(sizes) {
    let w = 0;
    let h = 0;
    sizes.forEach(s => {
        const [a, b] = s.sort((a,b) => a-b); // 이 부분!!!
        if (a > h) h = a;
        if (b > w) w = b;
    });

    return w * h;

배운점

문제 풀이 관련
가로, 세로를 예시에 나와있는대로 한정지어 생각해서 풀이를 생각하기 어려웠다.
생각해보면 가로, 세로는 딱 정해져있는게 아닌데..
각 카드의 긴 쪽을 가로로, 짧은 쪽을 세로로 정해버리면 어떤 경우에 카드를 눕혀야할지 고려하지 않아도 된다.
결론 - 편협적인 사고를 하지말자

코드 관련
map을 통해 들어오는 배열을 정렬해주면, 두 값을 서로 비교하는 if문을 줄일 수 있었다.

profile
#프론트엔드

0개의 댓글