프로그래밍/백준(C++)

[백준/C++] 10818번 - 최소, 최대 (정적할당, 동적할당)

shintesh 2023. 1. 3. 23:28
  • 문제

 

 

 

 


 

  • 동적 할당을 이용한 정답코드

 

#include<iostream>
using namespace std;


int main() {
	int length = 0;
	cin >> length;
	int* num = new int[1000000]; // 동적할당 이용
	for (int i = 0; i < length; i++) {
		cin >> num[i];
	}
	int min = 1000000, max = -1000000;
	// 최소
	for (int i = 0; i < length; i++) {
		if (min > num[i]) {
			min = num[i];
		}
	}
	// 최대
	for (int i = 0; i < length; i++) {
		if (max < num[i]) {
			max = num[i];
		}
	}
	cout << min << " " << max;
	delete[] num;
	return 0;
}

 

 


 

  • 정적할당 시 문제점

main 안에서 정적할당으로 하면 스택 사이즈가 초과되는 문제가 발생한다.

int num[1000000];

 

전역변수를 이용하면 위의 문제가 발생하지 않는다.

 

정적할당 시 전역변수로

#include<iostream>
using namespace std;

int num[1000000]; // 스택 오버플로우 방지

int main() {
	int length = 0;
	cin >> length;

	for (int i = 0; i < length; i++) {
		cin >> num[i];
	}
	int min = 1000000, max = -1000000;
	// 최소
	for (int i = 0; i < length; i++) {
		if (min > num[i]) {
			min = num[i];
		}
	}
	// 최대
	for (int i = 0; i < length; i++) {
		if (max < num[i]) {
			max = num[i];
		}
	}
	cout << min << " " << max;
	return 0;
}