개인공부/알고리즘

프로그래머스 - 직사각형 넓이 구하기 (Kotlin)

KEEMSY 2023. 8. 1. 19:57

 

프로그래머스

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

programmers.co.kr

이 문제는 단순히 가로길이와 세로길이만 구한다면 쉽게 풀이할 수 있었다. 그리고 각 길이는 주어진 꼭짓점을 활용하여 구할 수 있었다.

 

class Solution {
    fun solution(dots: Array<IntArray>): Int {

        val x1 = dots[0][0]
        val y1 = dots[0][1]
        
        val x2 = dots[1][0]
        val y2 = dots[1][1]
        
        val x3 = dots[2][0]
        val y3 = dots[2][1]
        
        val xLength = maxOf(Math.abs(x2 - x1), Math.abs(x3 - x1))
        val yLength = maxOf(Math.abs(y2 - y1), Math.abs(y3 - y1))
        

        val area = xLength * yLength
        
        return area
    }
}

 

코드를 더 줄일 방법을 고민했는데, 나는 더 줄이지 못하였고, 가장 먼저 나오는 다른 사람 풀이는 다음과 같았다.

 

class Solution {
    fun solution(dots: Array<IntArray>): Int {
        val coordX = dots.map { it[0] }.toSortedSet()
        val coordY = dots.map { it[1] }.toSortedSet()

        return (coordX.last() - coordX.first()) * (coordY.last() - coordY.first())
    }
}



요약하면, 이 코드는 주어진 점 배열에서 고유한 x 및 y 좌표를 찾아 정렬한 다음, x 및 y 방향에서 가장 큰 좌표와 가장 작은 좌표의 차이를 구하여 이 좌표로 구성된 직사각형의 면적을 계산한다.

 

같은 생각을 아름답게(?) 표현한 것이 대단하다.. 나도 이렇게 작성할 수 있도록 노력해야겠다.

728x90