Android/Algorithm

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

정생강 2024. 2. 28. 01:20

풀이 과정

 

해당 문제는 모든 명함의 가로 세로를 담은 2차원 배열 sizes를 입력받고 해당 명함이 다 들어갈 수 있는 사이즈의 지갑 넓이는 구하는 문제였다. 명함의 가로 세로를 돌려서 넣을 수 있으므로 한 명함의 가로 세로 중 긴 면과 짧은 면을 따로 저장 후 그 중 가장 큰 수들을 가로와 세로로 삼으면 되겠다고 생각했다.

 

해결 코드

class Solution {
    fun solution(sizes: Array<IntArray>): Int {
        var bigArray = ArrayList<Int>()
        var smallArray = ArrayList<Int>()
        
        for (i in sizes){
            if(i[0] > i[1]){
                bigArray.add(i[0])
                smallArray.add(i[1])
            }
            else
            {
                smallArray.add(i[0])
                bigArray.add(i[1])
            }
        }
        
        return bigArray.maxOf{it} * smallArray.maxOf{it}
    }
}

 

해설

우선 각 명함의 긴 면과 짧은 면을 저장 할 배열을 두개 만든 후 반복문과 조건믄을 통해 sizes배열의 각 요소마다 긴 쪽은 bigArray에 짧은 쪽은 smallArray에 저장되도록 하였다. 그 후 maxOf{it}을 사용하여 각 배열의 가장 큰 수를 구하고 곱하여 리턴하였다.

 

리뷰

해당 문제를 어떻게 해결할지는 금방 생각해냈지만 마지막 각 배열의 가장 큰 수를 구하는 부분에서 시간이 좀 걸렸다. 처음에는 max() 와 maxOfNull()을 사용했지만 둘 다 코드가 실행되지 않아 Array가 아닌 List로도 바꿔보고 좀 헤맸다.

maxOf{it}을 사용하니 해당 에러는 뜨지 않고 잘 실행되었다.