시간 제한이 2초면, 2억번 이하 연산으로 문제를 해결해야한다.
따라서 시간제한, 크기를 바탕으로 어떤 정렬 알고리즘을 사용해야할지 알 수 있다.
**
**
연산횟수 계산방법
버블정렬
병합정렬
🌟🌟🌟
시간복잡도
1. 상수는 시간 복잡도 계산에서 제외한다.
2. 가장 많이 중첩된 반복문의 수행횟수가 시간 복잡도의 기준이 된다.
3. 알고리즘 선택 기준이 된다.
4. 시간초과시 내 비효율적 코드가 어딘지 판단 기준이 된다.
5. 시간복잡도는 최악의 케이스를 기준으로 계산해야한다.
[예제1]
for(int i = 0; i < N; i++){
cout << "연산 횟수" << cnt++ << "\n";
}
for(int i = 0; i < N; i++){
cout << "연산 횟수" << cnt++ << "\n";
}
for(int i = 0; i < N; i++){
cout << "연산 횟수" << cnt++ << "\n";
}
일반 for문 3개 ⇒ 시간 복잡도 not 3N(상수는 제외하기에) , yes N
for(int i = 0; i < N; i++){
for(int i = 0; i < N; i++){
cout << "연산 횟수" << cnt++ << "\n";
}
}
[예제2]
이중 for 문 : N^2
만약, 이중 for문이 10개 있어도 : N^2
#include<vector> 필요vector<자료형> name 으로 지정
#include <iostream>
#include <vector>
using namespace std;
void main() {
ios_base::sync_with_stdio(false); // 동기화해제
cin.tie(NULL); // 입력, 출력 버퍼 비우기
vector<int> A;
A.push_back(10);
A.push_back(30);
A.push_back(5);
A.push_back(8);
A.push_back(6);
A.push_back(1);
A.insert(A.begin(), 7);
A.insert(A.begin()+2, 7);
A[4] = -5;
A.pop_back(); //마지막 값 삭제
A.erase(A.begin() + 3);
cout << A.size() << "\n";
cout << A.front() << "\n"; // 처음 값
cout << A.back() << "\n"; // 마지막 값
cout << A[3] << "\n";
cout << A.at(5) << "\n";
A.clear(); // 모든값 삭제
}