본문 바로가기

코딩테스트/C++

백준 정렬 알고리즘 2751번 C++

#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