Uknow's Lab.
article thumbnail

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는 클 수록 직사각형의 넓이가 작아지므로,

매 값이 들어올 때마다 작은/큰 값으로 갱신하고,

 

직사각형의 넓이를 출력하면 됩니다.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.