#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int N;
cin >> N;
int arr[100000];
int num;
for (int i = 0; i < N; i++) {
cin >> num;
arr[i] = num;
}
sort(arr, arr + N);
for (int i = 0; i < N; i++) {
cout << arr[i] << '\n';
}
}
이렇게 코드를 작성시 런타임 에러가 발생합니다.
이러한 상황을 방지하기 위해서는 동적 할당을 사용하여 배열의 크기를 입력 값 N에 따라 조정해야 합니다. 즉, 배열을 int* arr = new int[N];과 같이 동적으로 할당하고, 사용이 끝난 후에는 delete[] arr;를 통해 메모리를 해제해야 한답니다~
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int N;
cin >> N;
int* arr = new int[N];
int num;
for (int i = 0; i < N; i++) {
cin >> num;
arr[i] = num;
}
sort(arr, arr + N);
for (int i = 0; i < N; i++) {
cout << arr[i] << '\n';
}
delete[] arr;
return 0;
}
다른 방법으로는 Vector 를 이용해서 푸는 방식이 있습니다.
1. Vector (벡터)
vector는 C++ 표준 라이브러리에서 제공하는 동적 배열.
동적 배열은 크기가 동적으로 조절되며, 배열의 크기가 런타임에 결정된다.
이는 배열의 크기를 런타임에 유연하게 변경할 수 있어 매우 편리하다.
(vector는 <vector> 헤더 파일을 포함하여 사용할 수 있습니다)
2. push_back() 함수
push_back() 함수는 vector에 새로운 요소를 추가하는 함수.
이 함수는 인자로 전달된 값을 벡터의 끝에 추가한다.
예를 들어, 위 코드에서 a.push_back(tmp); 구문은 사용자로부터 입력받은 tmp 값을 벡터 a의 끝에 추가한다.
이를 통해 vector는 동적으로 크기가 조절되며, 사용자가 입력하는 값의 개수에 따라 자동으로 메모리를 할당하여 요소를 저장할 수 있다. 따라서 vector를 사용하면 배열의 크기를 런타임에 동적으로 조절할 수 있으며, push_back() 함수를 통해 쉽게 새로운 요소를 추가할 수 있다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int num,tmp;
vector<int> a;
cin >> num;
for(int i = 0; i < num; i++)
{
cin >> tmp;
a.push_back(tmp);
}
sort(a.begin(),a.end());
for(int i = 0; i < num; i++)
cout << a[i] << '\n';
}
맨 아래가 첫 번째 런타임 에러가 뜬 코드이며,
두 번째가 동적할당 int* arr = new int[N] 를 사용한 코드이고 5928KB 메모리를 사용했으며,
마지막 vector를 이용해 작성한 코드가 8176KB 메모리를 사용했습니다.
#백준 알고리즘, 종류 코딩 테스트 백준 알고리즘 정렬 sor
'코딩테스트 > C++' 카테고리의 다른 글
백준 정렬 알고리즘 25303번 C++ (0) | 2024.03.05 |
---|---|
백준 정렬 알고리즘 2587번 C++ (0) | 2024.03.05 |
백준 정렬 알고리즘 2750번 C++ (0) | 2024.03.02 |
백준 브루트 포스 알고리즘 2839번 C++ (0) | 2024.02.29 |
백준 브루트 포스 알고리즘 1436번 C++ (0) | 2024.02.28 |