메모리 초과

--·2022년 7월 1일
0

Broze 10989

첫시도

#include <iostream>
#include <algorithm>

using namespace std;

int main() {
	
	int N;
	cin >> N;
	int* arr = new int[N];
	for (int i = 0; i < N; i++) {
		cin >> arr[i];
	}
	sort(arr, arr + N);
	for (int i = 0; i < N; i++) {
		cout << arr[i] << '\n';
	}
	delete []arr;

	return 0;
}

문제에서 주어진 메모리 공간이 8MB이다.

  • 8MB = 8 X 1024KB = 8 X 1024 X 1024B = 8,388,608Byte = 8.4MB

1 <= N <= 10,000,000이므로
N이 최대라고 가정하면

  • int형 크기(4Byte) X 10,000,000 = 40,000,000Byte = 40MB

메모리 초과가 뜬다!

Silver 1789

첫시도

#include <iostream>
using namespace std;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int N;
	int plus = 0;
	cin >> N;
	int i = 1;
	while(1){
		plus = plus + i;
		if (plus > N) {i--; break; }
		i++;
	}
	cout << i;
	return 0;
}

시간초과가 뜨는데 이유를 모르겠다

ios::sync_with_stdio(0);
	cin.tie(0);

를 해보아도 시간초과가 뜬다.

두번째시도

#include <iostream>
using namespace std;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	long long N;
	long long plus = 0;
	cin >> N;
	int i = 1;
	while(1){
		plus = plus + i;
		if (plus > N) {i--; break; }
		i++;
	}
	cout << i;
	return 0;
}

문제에서 N의 최댓값은 4,294,967,295인데
int형의 최댓값은 2,147,483,647이므로
N = 4,294,967,295 일 때
plus > N 가 만족할 수 없으므로
while문은 무한루프에 빠지게 된다 -> 시간초과!

  • 메모리를 보고 int와 long long중 고민해야한다!

0개의 댓글