오늘부터는 알고리즘 개념을 한 번 더 복습하고 정리하기 위해 아래 강의를 듣기 시작했당
[바킹독의 실전 알고리즘] 0x01강 - 기초 코드 작성 요령 1
int func1(int arr[], int n) {
int cnt = 0;
for (int i = 0; i < n; i++) {
if (arr[i] % 5 == 0) cnt++;
}
return cnt;
}
N의 크기 | 허용 시간 복잡도 | N의 크기 | 허용 시간 복잡도 |
---|---|---|---|
N ≤ 11 | N ≤ 5,000 | ||
N ≤ 25 | N ≤ 1,000,000 | ) | |
N ≤ 100 | N ≤ 10,000,000 | ||
N ≤ 500 | ) | 그 이상 | |
N ≤ 3,000 |
int func1(int N)
{
int sum = 0;
for (int i = 1; i <= N; i++)
{
if (i % 3 == 0 || i % 5 == 0) sum += i;
}
return sum;
}
int func2(int arr[], int N)
{
int isExist = 0;
for (int i = 0; i < arr.Length; i++)
{
for (int j = i + 1; j < arr.Length; j++)
{
if (arr[i] + arr[j] == 100)
{
isExist = 1;
break;
}
if (isExist == 1) break;
}
return isExist;
}
}
int func3(int N)
{
int isSquare = 0;
for (int i = 1; i <= N / 2; i++)
{
if (i * i == N)
{
isSquare = 1;
break;
}
}
return isSquare;
}
int func4(int N)
{
int power2 = 1;
while (power2 * 2 <= N)
{
power2 *= 2;
}
return power2;
}
다음 중 Integer Overflow가 발생하는 함수는?
// 1
// 128번에 걸쳐 hi를 출력
void func1() {
for (char s = 0; s < 128; s++) {
cout << "hi";
}
}
//2
// 50!을 61로 나눈 나머지를 반환
int func2() {
int r = 1;
for (int i = 1; i <= 50; i++) {
r = r * i % 61;
}
return r;
}
// 3
// 10의 거듭제곱을 1000000007로 나눈 나머지를 반환
int func3() {
int a = 10;
int mod = 1000000007;
for (int i = 0; i < 10; i++) a = 10 * a % mod;
return a;
}
정답 : 1, 3번
위와 같은 단서가 없다면 보통 정수 자료형으로 해결되는 문제
double에 long long 범위의 정수를 함부로 담으면 안 됨
실수를 비교할 때는 등호를 사용하면 안 됨
int main(void) {
double a = 0.1 + 0.1 + 0.1;
double b = 0.3;
if (a == b) cout << "same 1\n";
if (abs(a-b) < 1e-12) cout << "same 2\n";
}
// result : same 2
오늘은 여기까지~
끗!