백준 알고리즘 - 코틀린 풀이
https://www.acmicpc.net/problem/9063
9063번: 대지
첫째 줄에는 점의 개수 N (1 ≤ N ≤ 100,000) 이 주어진다. 이어지는 N 줄에는 각 점의 좌표가 두 개의 정수로 한 줄에 하나씩 주어진다. 각각의 좌표는 -10,000 이상 10,000 이하의 정수이다.
www.acmicpc.net
1. 문제



2. 정답
<kotlin />
import java.util.*
fun main() = with(Scanner(System.`in`)){
val num = nextInt()
var minX = Int.MAX_VALUE
var minY = Int.MAX_VALUE
var maxX = Int.MIN_VALUE
var maxY = Int.MIN_VALUE
for(i in 0 until(num)) {
val x = nextInt()
val y = nextInt()
minX = minOf(minX, x)
minY = minOf(minY, y)
maxX = maxOf(maxX, x)
maxY = maxOf(maxY, y)
}
println((maxX - minX) * (maxY-minY))
}
3. 풀이
이번 문제는 점의 개수와 점들의 좌표값을 입력받고, 그 점들로 둘러쌓인 직사각형의 넓이를 구하는 문제입니다.
직사각형의 넓이는 가로 x 세로이고, 점들이 사각형의 변에 위치한다는 힌트를 이용해 풀 수 있는데요.
문제의 그림과 같이 x좌표의 값들 중 최대값과 최솟값의 차가 가로의 길이가 되고, y좌표의 값들 중 최대값과 최솟값의 차가 세로의 길이가 됩니다.
따라서 입력받은 좌표들 중 최솟값과 최댓값을 갱신시켜가며 입력이 끝났을 때의 값들의 곱으로 넓이를 구하시면 됩니다.
<kotlin />minX = minOf(minX, x) minY = minOf(minY, y) maxX = maxOf(maxX, x) maxY = maxOf(maxY, y)
※ 문제에서 입력으로 주어진 점 1개는 직사각형을 완성시킬 수 없어 최대, 최솟값이 동일하므로 자연스럽게 0이 출력됩니다.
감사합니다.
'백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘] 수학은 비대면(19532번) - 코틀린 풀이 (0) | 2023.09.26 |
---|---|
[백준 알고리즘] 행렬 덧셈(2738번) - 코틀린 풀이 (0) | 2023.09.25 |
[백준 알고리즘] 약수 구하기(2501번) - 코틀린 풀이 (0) | 2023.09.22 |
[백준 알고리즘] 소수(2581번) - 코틀린 풀이 (0) | 2023.09.22 |
[백준 알고리즘] 너의 평점은(25206번) - 코틀린 풀이 (0) | 2023.09.13 |