https://www.acmicpc.net/problem/9063
9063번: 대지
첫째 줄에는 점의 개수 N (1 ≤ N ≤ 100,000) 이 주어진다. 이어지는 N 줄에는 각 점의 좌표가 두 개의 정수로 한 줄에 하나씩 주어진다. 각각의 좌표는 -10,000 이상 10,000 이하의 정수이다.
www.acmicpc.net
난이도 : 브론즈 1
태그 : 수학, 구현, 기하학
설명
직사각형의 최소 크기를 출력해야 합니다.
직사각형의 최소 크기를 구하려면,
직사각형의 윗 변의 y좌표가 작을수록, 아랫 변의 y좌표가 클 수록,
오른쪽 변의 x 좌표가 작을 수록, 왼쪽 변의 x 좌표가 클 수록
직사각형의 넓이가 작아집니다.
따라서, 상하좌우의 좌표값을 저장해놓고, 매 값이 들어올 때마다 작거나 큰 값으로 갱신하면 됩니다.
소스코드
fun main() = with(System.`in`.bufferedReader()) {
val n = readLine().toInt()
var top = -10001
var bottom = 10001
var left = 10001
var right = -10001
repeat(n) {
val (x, y) = readLine().split(" ").map { it.toInt() }
top = top.coerceAtLeast(y)
bottom = bottom.coerceAtMost(y)
left = left.coerceAtMost(x)
right = right.coerceAtLeast(x)
}
println((top - bottom) * (right - left))
}
n.coreceAtLeast(x)/n.CoerceAtMost(x)는 x가 n보다 작을때/클때 그 값을 갱신하는 메서드입니다.
top과 right는 작을수록, bottom과 left는 클 수록 직사각형의 넓이가 작아지므로,
매 값이 들어올 때마다 작은/큰 값으로 갱신하고,
직사각형의 넓이를 출력하면 됩니다.
'코딩테스트 > Kotlin' 카테고리의 다른 글
[백준 20955번] [Kotlin] 민서의 응급 수술 (0) | 2023.05.07 |
---|---|
[백준 1525번] [Kotlin] 퍼즐 (0) | 2023.05.06 |
[백준 1103번] [Kotlin] 게임 (0) | 2023.05.03 |
[백준 14501번] [Kotlin] 퇴사 (0) | 2023.05.02 |
[백준 2146번] [Kotlin] 다리 만들기 (0) | 2023.04.27 |