Python/online judge

백준 [9063.대지] | Python

구름솜:D 2024. 1. 29. 15:49
728x90

✏️ 문제

https://www.acmicpc.net/problem/9063

 

9063번: 대지

첫째 줄에는 점의 개수 N (1 ≤ N ≤ 100,000) 이 주어진다. 이어지는 N 줄에는 각 점의 좌표가 두 개의 정수로 한 줄에 하나씩 주어진다. 각각의 좌표는 -10,000 이상 10,000 이하의 정수이다. 

www.acmicpc.net

 

✏️ 풀이방법

1. 2차원리스트(point)에 옥구슬의 위치를 리스트형식으로 담고, 옥구슬이 하나도 없는 경우에는 0을 출력하도록 한다.

2. 최소 크기의 직사각형을 구하기 위해 점의 위치를 오름차순으로 정렬해야 하는 데 한 축에 같이 존재하는 경우가 있음을 유의해야하기 때문에 x와 y좌표를 각각의 리스트로 받았다.

3. x좌표 y 좌표 각각의 리스트에서 가장 큰 값에서 작은 값을 빼서 옥구슬이 있는 직사각형을 구한다.

 

 

📌 코드

n = int(input())
points = [(list(map(int,input().split()))) for _ in range(n)]
if len(points) == 0:
    print(0)
x = sorted(points)
y = sorted(points, key=lambda x: x[1])
length = x[-1][0] - x[0][0]
height= y[-1][1] - y[0][1]
width = length*height
print(width)

 

 

📌 결과

#입력
3
20 24
40 21
10 12

#출력
360
#입력
1
15 13

#출력
0
#입력
4
2 1
3 2
5 2
3 4

#출력
9

 

 

🔎 다른풀이

n = int(input())
X, Y = [], []
for _ in range(n):
    x, y = map(int, input().split())
    X.append(x)
    Y.append(y)
print((max(X) - min(X)) * (max(Y) - min(Y)))

-  굳이 정렬안하고 min,max를 활용해도 된다.