개인공부/알고리즘
프로그래머스 - 직사각형 넓이 구하기 (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