이 문제는 단순히 가로길이와 세로길이만 구한다면 쉽게 풀이할 수 있었다. 그리고 각 길이는 주어진 꼭짓점을 활용하여 구할 수 있었다.
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
'개인공부 > 알고리즘' 카테고리의 다른 글
프로그래머스 - 입양 시각 구하기(2) SQL (0) | 2023.08.06 |
---|---|
프로그래머스 - 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2023.08.06 |
프로그래머스 - 캐릭터의 좌표 (Kotlin) (0) | 2023.07.31 |
프로그래머스 - 동명 동물 수 찾기 (MySQL) (0) | 2023.07.30 |
프로그래머스 - 고양이와 개는 몇마리 있을까? (MySQL) (0) | 2023.07.29 |