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

SeHoony·2022년 8월 17일
1

코테준비

목록 보기
5/27

1. 문제

최소직사각형 (레벨 1)
유형 : 완전탐색
https://school.programmers.co.kr/learn/courses/30/lessons/86491

2. 풀이

2-1. 원래 풀이

function solution(sizes) {
    var answer = 0;
    let maxi = 0
    let pair = []
    
    sizes.map(e => {
        let [x,y] = e
        if(x>=y){
            if(x > maxi){
                maxi = x
                pair = [x,y]
            }
        }
        else {
            if(y > maxi){
                maxi = y
                pair = [y,x]
            }
        }
    })
    
    sizes.map(e => {
        let [x,y] = e
        let bg = 0
        let sm = 0
        if(x>=y){
            bg = x
            sm = y
        }
        else{
            bg = y
            sm = x
        }
        
        let [px, py] = pair
        if(py < sm){
            pair[1] = sm
        }
    })
    const [x,y] = pair
    answer = x*y
    
    return answer;
}

원래 풀이했던 방식의 생각의 흐름을 정리해보자.
1. 세로 가로 다 필요없고 최대값을 가지고 있는 pair를 구하자.
2. pair가 구해지면, 이미 최대값은 비교했으니까 큰 값은 필요없고, pair의 작은 값이 모든 size의 작은 값을 커버할 수 있는지만 확인하면 된다. 이게 핵심

2-2. 어려웠던 점

완전탐색이라서 그런지, 코딩 공부를 오랜만에 해서 그런지, 내가 못해서 그런지 코드가 너무 지저분한 거 같아서 계속 의심이 들었다.

size의 x, y값 중에 어느 값이 더 큰 지 비교하고 다시 pair의 값과 비교하면서 if문이 중첩되어서 사용되는데,,, 더 개선할 필요가 있어 보였다.

3. 개선 코드

아... 나는 애초에 최댓값을 구했는데... 왜 그랬지.
다른 사람의 코드를 보고 개선한 코드다. 핵심은 '정렬'에 있다.

function solution(sizes) {
    var answer = 0;
    let maxX = 0
    let maxY = 0
    sizes.map(e => {
        let [x,y] = e.sort((a,b) => b-a)
        maxX = maxX > x ? maxX : x;
        maxY = maxY > y ? maxY : y;
    })
    answer = maxX * maxY
    return answer;
}

후반 테스트를 보면 시간 개선이 안된 부분도 있어서 의아하다.
그러나 sort를 통해 코드 가독성은 증가된 건 확실하다.

profile
두 발로 매일 정진하는 두발자, 강세훈입니다. 저는 '두 발'이라는 이 단어를 참 좋아합니다. 이 말이 주는 건강, 정직 그리고 성실의 느낌이 제가 주는 분위기가 되었으면 좋겠습니다.

0개의 댓글