본문 바로가기
스터디(programmers)

Kotlin] 프로그래머스 lv.1, 최소직사각형

by 김마리님 2023. 1. 27.

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

 

프로그래머스

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

programmers.co.kr

 

더보기

그림을 보자.

 

 

(대충 그린거지만)

명함을 단순히 놓으면 (1) 다음과 같이 특수하게 세로가 긴 경우 전체적인 넓이가 넓어진다.

하지만 저런 세로형태를 회전하여 놓게 된다면 전체적인 넓이가 좁아지는걸 볼수 있다. 

 

즉, 배열을 받았을 때, 세로가 길다면 회전시키고 난 후, 가로와 세로를 비교하여 가장 큰 가로와 가장 큰 세로를 출력하면 된다.

이 말은 즉, 받은 배열을 오름차순으로 정리하면 된다는 뜻이 된다.

 

이를 코드로 정리해보자.  

import java.util.Arrays

class Solution {
    fun solution(sizes: Array<IntArray>): Int {
        
        var width = 0
        var height = 0

        for (arrayItem in sizes) {
            Arrays.sort(arrayItem)
            if(width < arrayItem[1]) {
                width = arrayItem[1]
            }

            if(height < arrayItem[0]) {
                height = arrayItem[0]
            }
        }

        println(width)
        println(height)

        return width * height
    }
}

 

width에서 가장 큰 길이를 구하기 위해 전역변수로 width를 설정하고, 가장 큰 height를 구하기 위해 height를 설정한다.

 

 

 

++) 

코틀린의 함수 컬렉션을 이용해보려고 해서. 다음과 같은 함수를 쓰면 시간이 줄여지지 않을까 했는데..

fun solution2(sizes: Array<IntArray>) : Int {

    var widthArray = ArrayList<Int>()
    var heightArray = ArrayList<Int>()

    for (arrayItem in sizes) {
        Arrays.sort(arrayItem)
        widthArray.add(arrayItem[1])
        heightArray.add(arrayItem[0])
    }

    println(widthArray.max())
    println(heightArray.max())

    return widthArray.max() * heightArray.max()
}

음..  max 함수를 인식하지 못하는걸로 봐선 프로그래머스에 내장된 코틀린 컴파일러 버전이 낮아보임.. ^-^

 

반응형