개발새발 - IT 기술블로그
article thumbnail

백준 알고리즘  - 코틀린 풀이

 

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이 출력됩니다.

 

감사합니다.