반응형
1) 시간 복잡도
시간복잡도 : 입력의 크기와 문제를 해결하는데 걸리는 시간의 상관관계
빅오표기법 : 주어진 식을 가장 큰 대표항만 남겨서 나타내는 방법
ex. O(N) : 5N+3 , 2N+2
연습문제
/*
문제1
N 이하의 자연수 중에서 3의 배수이거나 5의 배수인 수를 모두 합한 값을 반환하는 함수 func1(int N)을 작성하라.
N은 10만 이하의 자연수이다.
*/
void func1(int N) {
int sum = 0;
for (int i = 1; i < (N + 1); i++) {
if (i % 5 == 0 || i % 3 == 0) {
sum += i;
}
}
cout << sum;
}
// 시간복잡도 O(N)
/*
문제2
주어진 길이 N의 int 배열 arr에서 합이 100인 서로 다른 위치의 두 원소가 존재하면 1을, 존재하지 않으면 0을 반환하는 함수 func2(int arr[],intN)을 작성하라.
arr의 각 수는 0이상 100이하이고 N은 1000이하이다.
*/
void func2(int arr[], int N) {
for (int i = 0; i < N; i++) {
for (int j = i+1; j < N; j++) {
if (arr[i] + arr[j] == 100) {
cout << 1;
return;
}
}
}
cout << 0;
}
//시간복잡도 = (n-1)+(n-2)+...+3+2+1 = N(N-1)/2 = O(N^2)
/*문제3
N이 제곱수이면 1을 반환하고 제곱수가 아니면 0일 반환하는 함수 func3(int N)을 작성하라. N은 10억 이하의 자연수이다.
*/
void func3(int N) {
for (int i = 0; i * i <= N; i++) {
if (i * i == N) {
cout << 1;
return;
}
}
cout << 0;
}
//시간복잡도 : O(루트N)
//문제4
//N 이하의 수 중에서 가장 큰 2의 거듭제곱수를 반환하는 func4(int N)을 작성하라. N은 10억 이하의 자연수이다.
void func4(int N) {
int num=2;
do {
num *= 2;
} while (num <= N);
cout << num/2<<endl;
}
//시간복잡도 : O(로그N)
2) 공간복잡도
공간복잡도 : 입력의 크기와 문제를 해결하는데 필요한 공간의 상관간계
512MB = 1.2억개의 int
3) 정수자료형
char - 1byte =8bit (255)
short - 2byte (32767)
int - 4byte (21억 쯤)
long long - 8byte
3) 실수자료형
float - 4byte
double - 8byte
*특징
1. 실수의 저장, 연산 과정에서 반드시 오차가 발생할 수 밖에 없다.
float : 10^-6
double : 10^-15
2. double에 long long 범위의 정수를 함부로 담으면 안된다
3. 실수를 비교할 때는 등호를 사용하면 안된다.
3) STL과 함수 인자
vector STL - 가변배열
vector<int> v(100); //int 100칸 배열 선언
v[20]=10;
v[60]=-4;
* 함수 인자로 사용하면 복사해서 전달됨!!
bool cmp1(vector<int> v1,vector<int> v2,int idx){
return v1[idx]>v2[idx];
}
// 시간 복잡도 O(N) -> 각 인자들을 복사
bool cmp2(vector<int>& v1,vector<int>& v2,int idx){
return v1[idx]>v2[idx];
}
// 시간 복잡도 O(1)
4) 표준 입출력
cin, cout 사용시 주의할점 (시간 지키기 위해)
1. ios::sync_with_stdio(0) : stream C와 stream C++ 모두 동기화 하면 오래걸림으로 streamC 버림
사용하면 C stream 사용 금지
2. cin.tie(nullptr)
*endl : \n + 버퍼비우기 - 사용 권장 X
5) 코드작성 팁
코딩테스트와 개발은 완전히 다르다
출력내용 뒤에 공백이나 줄바꿈은 상관없다
반응형
'공부 > 알고리즘' 카테고리의 다른 글
[ 알고리즘 ] BFS (0) | 2023.01.05 |
---|---|
[ 알고리즘 ] 스택의 활용(수식괄호의 쌍) (1) | 2023.01.01 |
[ 알고리즘 ] 스택 , STL stack (0) | 2022.12.21 |
[ 알고리즘 ] 연결리스트, STL list (0) | 2022.02.20 |
[ 알고리즘 ] 배열 , STL vector (0) | 2022.02.07 |