# 문제
임씨의 이름이 새겨진 옥구슬의 위치 N 개가 주어질 때에, 임씨에게 돌아갈 대지의 넓이를 계산하는 프로그램을 작성하시오. 단, 옥구슬의 위치는 2 차원 정수 좌표로 주어지고 옥구슬은 같은 위치에 여러 개가 발견될 수도 있으며, x 축의 양의방향을 동쪽, y 축의 양의방향을 북쪽이라고 가정한다.


# 풀이
답을 찾는 방법은 간단하다. 대소 비교를 통해 좌표를 찾아주면 되는데 방법은 여러가지다.
우선 정답 소스코드부터 확인해보자.
#include <iostream> #include <algorithm> using namespace std; int main(){ ios_base::sync_with_stdio(false); // 두 표준 입출력 동기화 해제 int n; cin >> n; // 배열 동적할당 int* x = new int[n]; int* y = new int[n]; for(int i=0; i<n; i++){ cin >> x[i] >> y[i]; } // 오름차순 정렬 sort(x, x+n); sort(y, y+n); cout << (x[n-1] - x[0])*(y[n-1] - y[0]); // 동적할당 메모리 해제 delete[] x; delete[] y; return 0; }
나는 동적배열을 사용해 문제를 풀이했는데 그냥 조건문을 사용해도 된다.
조건문을 사용하는 방법은 각각의 좌표가 -10,000 이상 10,000 이하의 정수라고 했으니 minX, maxX, minY, maxY를 각각 -10,000과 10,000을 넣어 만들고, 새롭게 받는 점의 좌표들과 비교하는 식으로 풀면 될 것 같다. 이렇게 하면 아마 사용하는 메모리 값은 줄어들듯?
int n; cin >> n; // 배열 동적할당 int* x = new int[n]; int* y = new int[n]; for(int i=0; i<n; i++){ cin >> x[i] >> y[i]; }
입력되는 점의 개수를 n으로 받고, 점의 개수를 크기로 해 x와 y배열을 동적할당으로 선언해주었다.
그리고 점들을 입력하며 배열에 받아주기.
// 오름차순 정렬 sort(x, x+n); sort(y, y+n); cout << (x[n-1] - x[0])*(y[n-1] - y[0]);
x좌표와 y좌표의 최댓값과 최솟값을 찾기 위해 sort를 사용해 오름차순 정렬을 해주었고,
(x좌표의 최댓값 - x좌표의 최솟값) * (y좌표의 최댓값 - y좌표의 최솟값)을 통해 답을 구해주었다.
// 동적할당 메모리 해제 delete[] x; delete[] y;
동적할당에 사용해준 메모리도 해제하면 끝!

➕ 어라라 조건문으로 돌려봤는데 메모리도 시간도 훨씬 낫길래 코드랑 결과 함께 첨부합니다
#include <iostream> using namespace std; int main(){ ios_base::sync_with_stdio(false); // 두 표준 입출력 동기화 해제 int minX = 10000, minY = 10000; int maxX = -10000, maxY = -10000; int a, b, n; cin >> n; while(n--){ cin >> a >> b; if(a >= maxX) maxX = a; if(b >= maxY) maxY = b; if(a <= minX) minX = a; if(b <= minY) minY = b; } cout << (maxX - minX)*(maxY - minY); return 0; }

9063번: 대지
첫째 줄에는 점의 개수 N (1 ≤ N ≤ 100,000) 이 주어진다. 이어지는 N 줄에는 각 점의 좌표가 두 개의 정수로 한 줄에 하나씩 주어진다. 각각의 좌표는 -10,000 이상 10,000 이하의 정수이다.
www.acmicpc.net
'백준 > C++' 카테고리의 다른 글
[백준] 14215번: 세 막대 | C++ 풀이 (0) | 2023.06.15 |
---|---|
[백준] 10101번: 삼각형 외우기 | C++ 풀이 (0) | 2023.06.14 |
[백준] 1085번: 직사각형에서 탈출 | C++ 풀이 (0) | 2023.06.12 |
[백준] 11653번: 소인수분해 | C++ 풀이 (0) | 2023.06.11 |
[백준] 2581번: 소수 | C++ 풀이 (0) | 2023.06.10 |