개발자 '쑥말고인절미'

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

STUDY/코딩테스트

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

쑥말고인절미 2022. 9. 23. 23:06

문제


내 답안

function solution(sizes) {
    let maxW = 0;
    let maxH = 0;
    
    for(let i=0; i<sizes.length; i++) {
        if(sizes[i][0] < sizes[i][1]) {
            let temp = sizes[i][0];
            sizes[i].splice(0, 1, sizes[i][1]);
            sizes[i].splice(1, 1, temp);
        }
        
        if(sizes[i][0] >= maxW) maxW = sizes[i][0];
        if(sizes[i][1] >= maxH) maxH = sizes[i][1];
    }
        
    return maxW*maxH;
}

메모

이틀에 걸쳐 푼 문제이다. 실제 고민하고 푼 시간은 3-4시간정도..? 뭐 하여튼 이틀동안 풀었고, 아 영 어떻게 이걸 알고리즘화 해야하는지 감이 안잡혔다. 80과 50이 최소직사각형이 된다는건 머리로는 이해가 가지만 왜 그렇게 될 수 있는지 논리적으로 설명하라고 하면 절대 못하는.. 그런 상태였다. 오늘도 열심히 고민하는 와중에 문제를 다시 읽어보았고, 문제에 '명함들을 적절히 회전'이라는 말에 꽂혔다. 회전... 그래 w, h 값을 회전하면 뭔가 실마리가 잡히려나? 하고 내 맘대로 w, h값의 순서를 바꾸어보았다. w와 h 값을 비교해서 더 큰 값을 w에 넣는 방식으로 해서 배열 내부의 순서를 바꿔보니 실마리가 잡혔다. 아 이게 말로 하려니 애매하게 설명이 안되는데 아래 내가 고민하면서 필기했던 내용을 첨부했다... 

w와 h값을 비교해서 큰 값들을 w에 배치한 뒤에 w 중에서도 가장 큰 값을 w값으로 결정하고, h 중에서 가장 큰 값을 h값으로 결정하니 해결할 수 있었다!

친구도 나처럼 노트에 적어보면서 해결했다. 친구 필기내용과 친구소스도 아래에 첨부했다. 나와 비슷한 루트로 해결했다ㅎㅎ

알고리즘도 알고리즘이지만 이걸 어떻게 해결할 수 있을지 감이 안잡히는게 너무 힘들었다. 다른 개발자분의 조언을 받아서 정답 안찾아보고 좀 더 고민해보았던건데 이렇게 해결할 수 있어서 뭔가 코테에 대한 아주 작은 답을 얻은 느낌이다.(조언 주셨던 개발자님께 감사드린다ㅎㅎ)

내가 고민했던 흔적(?)
친구가 고민했던 흔적(?)

function solution(sizes) {
    var answer = 0;
    var tep = 0;
    for(var i =0 ; i< sizes.length ; i++){
        if(sizes[i][0] < sizes[i][1]){
            tep = sizes[i][1];
            sizes[i][1] = sizes[i][0];
            sizes[i][0] = tep;
            tep = 0;
        }
    }
    var a1 = [];
    var a2 = [];
    
    for(var i=0; i< sizes.length ; i++){
        a1[i] = sizes[i][0];
        a2[i] = sizes[i][1];
    }
    
    answer = (Math.max.apply(null,a1)) * (Math.max.apply(null,a2))
    
    return answer;
}

참고링크

https://www.daleseo.com/js-array-slice-splice/

 

자바스크립트 배열의 slice()와 splice() 함수

Engineering Blog by Dale Seo

www.daleseo.com