카테고리 없음

[c++] 백준 9063번 대지(수학)

기술1 2024. 6. 1. 16:53
반응형

문제

 

 

코드

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
	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]) << endl;

	delete[] x;
	delete[] y;

	return 0;
}

 

 

알고리즘

동적배열 사용
sort 정렬 사용

이 두개 말고는 크게 집고 갈 부분은 없습니다. 저 같은 경우는 동적 배열을 만들어주었는데요. 배열이 정해지지 않았기 때문에 그렇게 정한 것입니다. 
 int N,x,x1(-10001),x2(10001),y,y1(-10001),y2(10001);

물론 최대값이 추어졌기 때문에 이런 식으로 해줘도 상관은 없습니다. 

 

동적배열에 대해서 설명하자면

int* x = new int[n];
int* y = new int[n];

정수형 포인터 'x'를 선언하고 크기가 'n'인 정수형 배열을 동적으로 할당합니다. 'new'연산자는 동적으로 메모리를 할당하고, 할당된 메모리의 시작 주소를 반환합니다. 이 시작 주소가 x에 저장되는 것입니다. 

 

int y 또한 정수형 포인터 'y'를 선언하고 크기가 n인 정수형 배열을 동적으로 할당하는 것입니다.

 

이 동적배열을 해주는 이유는 크기가 가변적인 배열로 프로그램이 실행되기 전에 크기를 알 수 없을 때 사용이 되며 메모리의 효율성도 있기에 사용합니다. 

 

이렇게 동적으로 메모리를 사용한 경우 

delete[] x;
delete[] y;

꼭 delete를 해야합니다. 

 

	sort(x, x + n);
	sort(y, y + n);

동적으로 생성된 x[] y[] 각각에 for문으로 넣었기 때문에 여기에서 최댓값과 최소값을 찾아줄 것입니다. 이것은 sort() 문을 통해 간단하게 x , x+n  y, y+n으로 찾아주시면 됩니다.

 

cout << (x[n-1] - x[0]) * (y[n-1] - y[0]) << endl;

이후 cout을 통해 출력을 해주시면 됩니다. 최대 - 최소 를 x  y 둘 다 해주면 값이 나옵니다. 

반응형