(코딩테스트) 최소직사각형

2024. 3. 28. 17:43개발자 과정/Kotlin

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

 

프로그래머스

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

programmers.co.kr

풀이의 선택과정

1. 카드를 눕히면 더 효율적인 크기가 된다고 한다.

2. 그럼 배열정렬한다.

3. 이제 큰 값들끼리 곱한다.

 

정답풀이

class Solution {
    fun solution(sizes: Array<IntArray>): Int {
        var w=0; var h=0;
        sizes.forEach {
            it.sort()
            w= max(w, it[0])
            h= max(h, it[1])
        }
        return w*h
    }
}

 

핵심로직

it.sort()

정렬을 통해 가로,세로를 정리하고, 큰 값만 뽑아오면 최소 직사각형을 만들 수 있다.

 

여담으로 딱히 좋은 로직은 아니다. 

생각하기 귀찮으니까 정렬해서 꿀빨아야지! 하고 만든 로직이라 양질의 코드는 아니다.

정렬을 할 바엔 작은 원소들 중에 큰 값, 큰 원소들 중에 큰 값을 구하면 되기 때문이다.

해당 방법으로 만든 코드도 올리려고 한다.

class Solution {
    fun solution(sizes: Array<IntArray>): Int {
        var w = 0;
        var h = 0;
        sizes.forEach {
            val maxEle = max(it[0], it[1])
            val minEle = min(it[0], it[1])
            //배열중 큰 원소와 작은 원소를 구분
            
            w = max(w, maxEle)
            h = max(h, minEle)
            //구분된 원소들 중 가장 큰 값을 갱신
        }
        return w * h
    }
}