์ถ์ฒ : ๋ด์ผ๋ฐฐ์์บ ํ
1. ๊ณต๊ฐ ๋ณต์ก๋
1 - 1. ๊ณต๊ฐ ๋ณต์ก๋ ๊ฐ์
- ํ๋ก๊ทธ๋จ์ ์คํ ๋ฐ ์๋ฃํ๋๋ฐ ํ์ํ ์ ์ฅ๊ณต๊ฐ์ ์์ ๋ปํ๋ค
= > ํ๋ก๊ทธ๋จ ๋ณต์ก๋๋ ์๊ฐ ๋ณต์ก๋์ ๊ณต๊ฐ ๋ณต์ก๋๋ก ๋๋ ์ ์๋ค
์๊ฐ ๋ณต์ก๋ : ์ผ๋ง๋ ๋น ๋ฅด๊ฒ ์คํ๋๋์ง
๊ณต๊ฐ ๋ณต์ก๋ : ์ผ๋ง๋ ๋ง์ ์ ์ฅ ๊ณต๊ฐ์ด ํ์ํ์ง
~ ํต์ ๋ ๋ค๋ฅผ ๋ชจ๋ ๋ง์กฑํ๊ธฐ๋ ์ด๋ ต๋ค
- ์๊ฐ๊ณผ ๊ณต๊ฐ ๋ณต์ก๋๋ ๋ฐ๋น๋กํ๋ ๊ฒฝํฅ์ด ์๋ค
- ์ต๊ทผ ๋์ฉ๋ ์์คํ ์ด ๋ณดํธํ๋๋ฉฐ, ๊ณต๊ฐ ๋ณต์ก๋๋ณด๋ค ์๊ฐ ๋ณต์ก๋๊ฐ ๋ฎ์ ๊ฒ์ด ์ฐ์ ๋๋ ์ถ์ธ
- ์๊ณ ๋ฆฌ์ฆ ํ์ด์, ์๊ฐ ๋ณต์ก๋๋ฅผ ์ฐ์ ํ์
- ๋ค๋ง, ๊ทธ๋ ๋ค๊ณ ๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ์ํํ ํ๋ฉด ์๋๋ค
์ด ํ์ํ ์ ์ฅ๊ณต๊ฐ
- ๊ณ ์ ๊ณต๊ฐ(์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฌด๊ดํ ๊ณต๊ฐ) : ์ฝ๋ ์ ์ฅ ๊ณต๊ฐ, ๋จ์ ๋ณ์ ๋ฐ ์์
- ๊ฐ๋ณ ๊ณต๊ฐ(์๊ณ ๋ฆฌ์ฆ ์คํ๊ณผ ๊ด๋ จ์๋ ๊ณต๊ฐ) : ์คํ ์ค ๋์ ์ผ๋ก ํ์ํ ๊ณต๊ฐ
S(P) = c + Sp(n) ~ c : ๊ณ ์ ๊ณต๊ฐ, Sp(n) : ๊ฐ๋ณ ๊ณต๊ฐ
- ๊ณ ์ ๊ณต๊ฐ์ ์์์ด๋ฏ๋ก ๊ณต๊ฐ ๋ณต์ก๋๋ ๊ฐ๋ณ ๊ณต๊ฐ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค
1 - 2. ๊ณต๊ฐ ๋ณต์ก๋ ์์ : ๋น ์ค ํ๊ธฐ๋ฒ
1) O(n) ๊ณต๊ฐ ๋ณต์ก๋ ์์
n! ํฉํ ๋ฆฌ์ผ ๊ตฌํ๊ธฐ
- ์ฌ๊ท ํจ์๋ฅผ ํตํด ๊ตฌํํ๋ฏ๋ก ๋ณ์ n์ ๋ฐ๋ผ ๋ณ์ n์ด n๊ฐ ๋ง๋ค์ด์ง๋ค
- factorial ํจ์๋ฅผ ์ฌ๊ท ํจ์๋ก 1๊น์ง ํธ์ถํ ๊ฒฝ์ฐ, n๋ถํฐ 1๊น์ง ์คํ์ ์์ธ๋ค
- ๋ฐ๋ผ์ ๊ณต๊ฐ ๋ณต์ก๋๋ O(n)
public int factorial(int n) {
if(n == 1) {
return n;
}
return n*factorial(n-1);
}
๋ฐฐ์ด์์ n์ธ๋ฑ์ค ์ด์ ๊น์ง ํฉ ๊ตฌํ๊ธฐ
- ์ฌ์ฉ๋๋ ๋ณ์๋ a[], n, result, i์ด๋ค
- (a[]์ n๊ฐ์ ์์๋ฅผ ์ ์ฅํ ๊ณต๊ฐ) + (๋ณ์ n, i, result๋ฅผ ์ํ ๊ณต๊ฐ)์ด ํ์ํ๋ค. a[]๊ฐ n๋ณด๋ค ํฐ ๊ณต๊ฐ์ ํ ๋นํด์ผํ๋ฏ๋ก O(n)๋งํผ์ ๊ณต๊ฐ ๋ณต์ก๋๊ฐ ํ์ํ๋ค
public int sum(int a[], int n){
int result =0;
for(int i=0; i<n ; i++){
result += a[i];
}
return result;
}
2) O(n) ๊ณต๊ฐ ๋ณต์ก๋ ์์
n! ํฉํ ๋ฆฌ์ผ ๊ตฌํ๊ธฐ (๋ฐ๋ณต๋ฌธ ๋ฒ์ )
- ๋ฐ๋ณต๋ฌธ์ ํตํด ๊ตฌํํ๋ฏ๋ก result์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๊ณต๊ฐ ๋ณต์ก๋๋ O(1)์ด๋ค
- ์ฌ์ฉํ๋ ๋ณ์ n, i, result
public int get_factorial(int n)
{
int i = 0;
int result = 1;
for(i = 1; i <= n; i++)
{
result = result * i;
}
return result;
}
1 - 3. ๊ณต๊ฐ ๋ณต์ก๋ ์ ์ฉ
- ๊ณต๊ฐ ๋ณต์ก๋๋ ์ ๋ ฅ์ ํฌ๊ธฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ ํ์ํ ๊ณต๊ฐ์ ์๊ด๊ด๊ณ๋ฅผ ์๋ฏธํ๋ค
- ํฌ๊ธฐ N์ 2์ฐจ์ ๋ฐฐ์ด์ O(N^2), ๋ฐฐ์ด์ด ์๋ค๋ฉด O(N)์ด๋ค
- ๋ณดํต ๋ฐ์ดํฐ ์์ญ์ด ์คํ ์์ญ๋ณด๋ค ํฌ๊ธฐ ๋๋ฌธ์ ํฐ ๋ฐฐ์ด์ ์ ์ญ ๋ณ์๋ก ์ ์ธํ๋ค. ์คํ ์์ญ์ ํฐ ๋ฐฐ์ด์ ์ ์ฅํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค
- ๋ฉ๋ชจ๋ฆฌ๋ ์ง์ ๊ณ์ฐํด๋ณด๋ฉด ๋๋ค. 512MB์ ๊ฒฝ์ฐ 1.2์ต ๊ฐ์ int๊ฐ ๋ค์ด๊ฐ๋ค
- ๋ณดํต 100MB ์ด์์ด ์ฃผ์ด์ง๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ ์์ค์ด๋ค. ํ์ง๋ง 2MB์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ๊ฒ ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ๋ฅผ ํด์ค์ผ ํ๋ค. 2MB๋ฅผ int๋ก ๋๋๋ฉด 50๋ง ๊ฐ ์ ๋๋น์ ๋ค์ด๊ฐ์ง ๋ชปํ๋ฏ๋ก ์คํ ๋ด ๋ฐฐ์ด ์ฌ์ฉ์ ์ฃผ์ํด์ผ ํ๋ค
- ๋ฌธ์ ํ์ด ์ "์ ํ์กฐ๊ฑด ํ์ธ"์ ๊ณต๊ฐ ๋ณต์ก๋ ๊ณ์ฐ์ ํด์ผํ๋ค
1) ๋น ์ค ํ๊ธฐ๋ฒ
- ๋น ์ค ํ๊ธฐ๋ฒ์ ๋ฐ์ดํฐ๊ฐ ๋์ด๋ ๋ ๋จ๊ณ ์๊ฐ ์ด๋ป๊ฒ ์ฆ๊ฐํ๋ ์ง๋ฅผ ์๋ฏธํ๋ค
** O(3) == O(100) == O(1)
~ ๋ฐ์ดํฐ(์์)๊ฐ ๋ช ๊ฐ๋์ง ํญ์ 3๋จ๊ณ์ธ ์๊ณ ๋ฆฌ์ฆ์ด ์์ ๋, ๋น ์ค ํ๊ธฐ๋ฒ์ ๋ฐ๋ฅด๋ฉด ๋ฌด์กฐ๊ฑด O(1)์ด๋ค
O(1)์ ์์ ๊ฐ์์ ๊ด๊ณ์์ด ์ํ์ ์์ ์๊ฐ์ ๊ฐ์ง๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค
O(N)์ ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋ ๋๋ง๋ค ์๊ณ ๋ฆฌ์ฆ๋ ํ ๋จ๊ณ์ฉ ์ถ๊ฐ๋๋ค
=> O(N)์ ๋ฐ์ดํฐ์ ์๊ฐ ๊ฐ์๋ ์๊ณ ๋ฆฌ์ฆ์ ๋จ๊ณ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํญ์ O(1)๋ณด๋ค ๋นํจ์จ์ ์ด๋ค
+ ์ ํ ๊ฒ์์ด ํญ์ O(N)์ ์๋๋ค. ์ฐพ๋ ๊ฐ์ด ๋ฐฐ์ด์ ๋งจ ์์ ์์ผ๋ฉด O(1), ๋งจ ๋ง์ง๋ง์ ์์ ๋ O(N)์ด๋ค
~ ์ผ๋ฐ์ ์ผ๋ก ์ต์ ์ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค
2) O(logN) == O(log2N) ~ ๊ฐ์ ๋ง
- O(logN)๋ฐ์ดํฐ ์์๊ฐ N๊ฐ์ผ ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ช ๋จ๊ณ๊ฐ ํ์ํ ๊น?
= ์๊ณ ๋ฆฌ์ฆ ๋จ๊ณ๊ฐ log2 N์ด๋ค
~ ์์๊ฐ 8๊ฐ๋ฉด log2 8์ด๋ฏ๋ก 3๋จ๊ณ
* ์ด์ง ๊ฒ์์ด ์ ํํ๊ฒ O(logN)์ผ๋ก ์๋ํ๋ค
=> ๋ฐ์ดํฐ๊ฐ ์ปค์ง ์๋ก ๋จ๊ณ๋ ์ฆ๊ฐํ๋ฏ๋ก O(1)์ด๋ผ๊ณ ํ ์ ์์ผ๋ฉฐ, O(N)๋ณด๋ค ๋จ๊ณ๊ฐ ๋๋ฆฌ๊ฒ ์ฆ๊ฐํ๋ฏ๋ก O(N)๋ ์๋๋ค
=> ๋ฐ์ดํฐ๊ฐ ๋๋ฐฐ๋ก ์ฆ๊ฐํ ๋๋ง๋ค ๋จ๊ณ๋ ํ ๋จ๊ณ์ฉ ์ฆ๊ฐํ๋ค
// ์์ 1๋ฒ
public static void main(String[] args) {
// n ์
๋ ฅ
int sum = 0;
for (int i = 0; i < n; i++) {
sum += i;
}
System.out.println(sum);
}
=> O(1) ๊ณต๊ฐ ๋ณต์ก๋ : ์ ๋ ฅ ๊ฐ n์ ๊ด๊ณ์์ด ๋์ผํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉ
// ์์ 2๋ฒ
public static void main(String[] args) {
// n ์
๋ ฅ
int[] arr = new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
=> O(n) ๊ณต๊ฐ ๋ณต์ก๋ : ์ ๋ ฅ ๊ฐ n์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ(๋ฐฐ์ด)์ ํฌ๊ธฐ๊ฐ ๋ฌ๋ผ์ง๋ฏ๋ก O(n)
// ์์ 3๋ฒ
public static void main(String[] args) {
// n ์
๋ ฅ
int[][] arr = new int[n][n];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = i * j;
}
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.println(arr[i][j]);
}
}
}
=> 2์ฐจ์ ๋ฐฐ์ด์ ๊ฒฝ์ฐ : O(n^2), ์ ๋ ฅ ๊ฐ n์ ๋ฐ๋ผ ๋ฐฐ์ด ํฌ๊ธฐ๊ฐ n^2๋ก ์ฆ๊ฐํ๋ค
public static void main(String[] args) {
// n ์
๋ ฅ
boolean[] isPrime = new boolean[n + 1];
for (int i = 2; i <= n; i++) {
if (!isPrime[i]) {
for (int j = i * i; j <= n; j += i) {
isPrime[j] = true;
}
}
}
for (int i = 2; i <= n; i++) {
if (!isPrime[i]) {
System.out.println(i);
}
}
}
=> O(n log n) : ์์ ํ๋ณ์ ์ฌ์ฉํ๋ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ n log n์ผ๋ก ์ฆ๊ฐ
import java.util.HashSet;
public class FindDuplicateNumbers {
public static int[] findDuplicates(int[] arr) {
HashSet<Integer> set = new HashSet<>();
HashSet<Integer> duplicates = new HashSet<>();
for (int num : arr) {
if (set.contains(num)) {
duplicates.add(num);
} else {
set.add(num);
}
}
int[] result = new int[duplicates.size()];
int index = 0;
for (int num : duplicates) {
result[index] = num;
index++;
}
return result;
}
public static void main(String[] args) {
int[] arr = {1, 3, 2, 4, 2, 3 ...}; // k๊ฐ๊ฐ ์ค๋ณต๋ n๊ฐ์ ์ซ์
int[] duplicates = findDuplicates(arr);
System.out.print("์ค๋ณต๋ ์ซ์: ");
for (int num : duplicates) {
System.out.print(num + " ");
}
}
}
=> O(k), k๊ฐ๊ฐ ์ค๋ณต๋ n๊ฐ์ ์ซ์์ ๋น๋กํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ฏ๋ก k์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ค
+ n์ด 10๋ง ์ด์์ผ ๊ฒฝ์ฐ, ๊ฐ์ฅ ๊ณต๊ฐ์ ์ ๊ฒ ์ฐ๋ ์์๋?
1. O(n) = 2^n
2. O(n) = n^(3/2)
3. O(n) = n Log n
4. O(n) = n^(Log n)
5. O(n) = n!
=> 3, 2, 4, 1, 5
2. ๊ณต๊ฐ ์์์ ํ๊ณ
2 - 1. ์ปดํจํฐ์ ๊ณต๊ฐ ์์
๋ณต์ก๋ ๊ณ์ฐ์ ์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ํ์ ์ ์ฉํ๊ธฐ
- ํ๋ก๊ทธ๋จ์ ์ฃผ ๊ธฐ์ต์ฅ์น์์ ์คํ๋๋ค
- ํ๋ก๊ทธ๋จ์ ์คํ๋๊ธฐ ์ํด ๊ณ ์ ๊ณต๊ฐ๊ณผ ๊ฐ๋ณ ๊ณต๊ฐ์ด ํ์ํ๋ค ~ S(P) = c + Sp(n)
2 - 2. ์ฃผ ๋ฉ๋ชจ๋ฆฌ์ ๊ณต๊ฐ ์์
+ ์ฎ์ด๋ณด๊ธฐ : https://cdaosldk.tistory.com/288
1) ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ
ํ๋ก๊ทธ๋จ์ ์ด๋ค ์์ ์ ์ํด ์คํํ ์ ์๋ ํ์ผ ~ ํ๋ก์ธ์ค๊ฐ ํ๋ก๊ทธ๋จ์ ์คํํ๋ค
- ์ปดํจํฐ์์ ์ฐ์์ ์ผ๋ก ์คํํ๊ณ ์๋ ์ปดํจํฐ ํ๋ก๊ทธ๋จ
- ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์ ์คํ๋๊ณ ์๋ ํ๋ก๊ทธ๋จ์ ์ธ์คํด์ค
- ์ด์์ฒด์ ๋ก๋ถํฐ ์์คํ ์์์ ํ ๋น๋ฐ๋ ์์ ๋จ์
ํน์ง
- ๋ ๋ฆฝ๋ ์์ญ(์ฝ๋, ์คํ, ๋ฐ์ดํฐ, ํ)์ ํ ๋น๋ฐ๋๋ค
์ฝ๋ : ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ฑํ ํ๋ก๊ทธ๋จ์ด ์ ์ฅ๋๋ ์์ญ
๋ฐ์ดํฐ : ์ฝ๋ ์คํ ์ ํ๊ฒฝ์ด๋ ํ์ผ ๋ฑ์ ๋ฐ์ดํฐ๊ฐ ๋ชจ์ฌ์๋ค
์คํ : ํธ์ถํ ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด ๋๋์์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ ์ง์ญ๋ณ์ ๋ฑ์ด ์ ์ฅ๋๋ค
~ ๋ฉ์๋ ๋ด ์ง์ญ๋ณ์๊ฐ ๋ฉ์๋ ์คํ ๋จ์๋ก ์ ์ฅ๋๊ณ ํด์ ๋๋ค
ํ ์์ญ : ๋์ ์ผ๋ก ํ ๋น๋๋ ๋ฐ์ดํฐ๋ฅผ ์ํด ์กด์ฌ
~ ๋ฉ์๋์ ์ ๋ฌ๋๋ ์ฐธ์กฐํ ๋ณ์๊ฐ ์ ์ฅ๋๊ณ ํด์ ๋๋ค
- ์ต์ 1๊ฐ ์ด์์ ์ฐ๋ ๋(๋ฉ์ธ ์ฐ๋ ๋)๋ฅผ ๊ฐ์ง๊ณ ์๋ค
- ๊ฐ ํ๋ก์ธ์ค๋ ๋ณ๋์ ์ฃผ์ ๊ณต๊ฐ์์ ์คํ๋๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค ์์์ ์ ๊ทผํ ์ ์๋ค
- ํ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์์์ ์ ๊ทผํ๋ ค๋ฉด ํ๋ก์ธ์ค ๊ฐ ํต์ ์ ์ฌ์ฉํด์ผ ํ๋ค
- CPU๋ ํ ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค๋ง ์คํ ๊ฐ๋ฅํ๋ค
+ Heap vs Stack
1) Heap : Heap์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ์์ญ์ผ๋ก, ๊ฐ์ฒด๋ ์ฐธ์กฐํ ๋ณ์์ ์ ์ฅ๋๋ ๊ฐ์ผ๋ก ๋ฐฐ์ด, ํด๋์ค ์ธ์คํด์ค, ๋ฌธ์์ด ๋ฑ์ด ์๋ค. ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋์ ์ผ๋ก ํ ๋น๋๊ณ ํด์ ๋๋ฉฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ฎ์ ์ฃผ์์์๋ถํฐ ๋์ ์ฃผ์๋ก ํ ๋น์ด ์ด๋ฃจ์ด์ง๋ค
2) Stack : ์ง์ญ๋ณ์, ๋งค๊ฐ๋ณ์, ๋ฆฌํด ๊ฐ ๋ฑ์ ์ ์ฅํ๋ ์์ญ์ผ๋ก, ์ง์ญ๋ณ์๋ ๋ฉ์๋๊ฐ ์คํ๋๋ ๋์๋ง ์กด์ฌํ๊ธฐ ๋๋ฌธ์ Stack ์์ญ์ ์ ์ฅ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ์ ํ์ ์ผ๋ก ํ ๋น๋๊ณ ํด์ ๋๋ฉฐ ๋ฉ๋ชจ๋ฆฌ์ ๋์ ์ฃผ์์์ ๋ฎ์ ์ฃผ์๋ก ํ ๋น์ด ์ด๋ฃจ์ด์ง๋ค
2) ์ฐ๋ ๋์ ์ฃผ์ ๊ณต๊ฐ
- ํ๋ก์ธ์ค ๋ด ์คํ๋๋ ์ฌ๋ฌ ํ๋ฆ์ ๋จ์
- ํ๋ก์ธ์ค ํน์ ์ํ ๊ฒฝ๋ก
- ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ฐ์ ์์์ ์ด์ฉํ๋ ์ต์ ์คํ ๋จ์
ํน์ง
ํ๋ก์ธ์ค ๋ด ํ์ํ ์คํ๋ง ํ ๋น๋ฐ์ผ๋ฉฐ, ์ด์ธ ์ฝ๋, ๋ฐ์ดํฐ, ํ ์์ญ์ ๊ณต์ ํ๋ค
~ ์ฐ๋ ๋๋ ํ์ ์ฐธ์กฐํ ๋ณ์๋ฅผ ์์ ํ ์ ์๋ค
- ํ๋ก์ธ์ค ํ๋๋ง ์ฌ์ฉํด ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ๋ฐ์ํ๋(์์ ์ ์ํํ๊ธฐ ์ํด ๋งค๋ฒ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ ๋น๋ฐ์์ผ ํ๋ฏ๋ก)
~ ์ฐ๋ ๋๋ ํ๋ก์ธ์ค์ ๋ค๋ฅด๊ฒ ์ค๋ ๋ ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ค
~ ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ฐ์ ์์์ ์ด์ฉํ๋ ์ฒ๋ฆฌ ์์ ๋จ์
3) ์ผ๋ฐ์ ์ธ ์ฃผ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์์
- ์ผ๋ฐ์ ์ผ๋ก 512MB ๋ด์ธ
์ต์ํ์ ์ปดํจํ ํ๊ฒฝ์์ ํ๋ก๊ทธ๋จ์ ํ ๋นํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ด๋ค. ํนํ AWS EC2์์ ํ์ธํ ์ ์๊ณ , ์ฐ์ฐํ ๋ ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ๊ณ ์ ๊ณต๊ฐ๋ณด๋ค ์ฌ์ ์๊ฒ ์ฉ๋์ ์ค์ ํด์ผ ํ๋ค
2 - 3. ์ซ์ ์๋ฃํ์ ํ๊ณ : ์๋ฃํ ํฌ๊ธฐ๋ก ์ธํ ํํ ๋ฒ์์ ํ๊ณ
1. ๋ถํธ ์๋ ์ ์ : ์๋ฐ ๋๋ ํ์ด์ฌ์ ๋ถํธ ์๋ ์ ์๋ฅผ ์ง์ ์ง์ํ์ง ์๋๋ค. int๊ฐ ์๋๋ผ long์ ํ์ฉ(ํ์ด์ฌ์ int)ํด ๋ถํธ๋ฅผ ํํํ๊ฑฐ๋ ๋นํธ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๋ณดํต 8๋ฐํธ๋ก ํํํ๋ค
long a = 12L;
long b = 7L;
long result = a & b;
System.out.println("Result: " + result);
+ ๋นํธ ์ฐ์ฐ์ : https://tcpschool.com/c/c_operator_bitwise
2. ๋ถํธ ์๋ ์ ์ : ์๋ฐ๋ byte, short, int, long์ผ๋ก, ํ์ด์ฌ์ int๋ก ํํํ๋ค. ๋ณดํต 4๋ฐ์ดํธ ๋๋ 8๋ฐ์ดํธ๋ก ํํํ๋ค
int a = 10;
int b = -5;
int sum = a + b;
System.out.println("Sum: " + sum);
3. ์ค์ : ์๋ฐ๋ float, double๋ก ํํํ๋ค. ๋ณดํต 4๋ฐ์ดํธ ๋๋ 8๋ฐ์ดํธ๋ก ํํํ๋ค
* ์๋ฃํ์ ํ๊ณ๊ฐ ์ค์ํ ์ด์
์๋ฃํ์ ํํ ๋ฒ์๋ฅผ ์ด๊ณผํ๊ฒ ๋๋ฉด ์์๊ฐ ์์๋ก ๋ฐ๋๊ฑฐ๋ ์์๊ฐ ์์๋ก ๋ฐ๋๋ค(์์ดํ์ค ๋ญํน 1์ ์ผ์ด์ค)
=> Overflow๊ฐ ๋ฐ์ํ๋ค
ํนํ, ์ค์๋ฅผ ๋น๊ตํ ๋
int main(void) {
double a = 0.1 + 0.1 + 0.1;
double b = 0.3;
if (a == b) {
System.out.println("same 1");
}
if (Math.abs(a - b) < 1e-12) {
System.out.println("same 2");
}
}
/**** result ****
same 2
*****************/
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"; // 1e-12 == 10^-12 / 1e9 == 10^9
}
/**** result ****
same 2
*****************/
2 - 4. ๋ฐฐ์ด ์๋ฃํ์ ํ๊ณ : ๋ณ์ ํฌ๊ธฐ์ ๋ฐฐ์ด ํฌ๊ธฐ์ ๋ฐ๋ฅธ ์ ์ฅ ๋ฒ์
1) ๋ฐฐ์ด์ ์ ์ฅ ๊ณต๊ฐ ํ ๋น
- 1์ฐจ์ ๋ฐฐ์ด์ ์ฐ์์ ๊ณต๊ฐ์ ํ ๋น๋๋ฉฐ ์ต์ด ์ฃผ์๊ฐ์ ๊ธฐ์ค์ผ๋ก 0๋ถํฐ 1์ฉ ์ฃผ์๊ฐ์ด ๋ํด์ง๋ค
~ ํฌ๊ธฐ๊ฐ 3์ธ ๋ฐฐ์ด์ ๋ง๋ค ๋
~ ๊ณต๊ฐ ๋ณต์ก๋๋ O(3)
~ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ 4๋ฐ์ดํธ * 3 = 12๋ฐ์ดํธ
- 2์ฐจ์ ๋ฐฐ์ด์ ๋ ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง์ง๋ง ์ ์ฅ ๊ณต๊ฐ์ ์ฐ์๋ ๊ณต๊ฐ์ ํ ๋น๋๋ค
~ 1์ฐจ์ ํฌ๊ธฐ๋ 2, 2์ฐจ์ ํฌ๊ธฐ๋ 3์ธ ๋ฐฐ์ด์ ๋ง๋ค ๋
~ ๊ณต๊ฐ ๋ณต์ก๋๋ O(2*3)
~ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ 4๋ฐ์ดํธ * 2 * 3 = 24๋ฐ์ดํธ
2) ๋ฐฐ์ด์ ์ ์ฅ ํ๊ณ
- int ๋ฉ๋ชจ๋ฆฌ ๊ณ์ฐ : ๋ฐ์ดํธ, ํฌ๋ก๋ฐ์ดํธ, ๋ฉ๊ฐ๋ฐ์ดํธ, ๊ธฐ๊ฐ๋ฐ์ดํธ ~ ๊ฐ๊ฐ ์ฒ์ ์๋ฆฌ์์ ๋จ์ ๋ณ๊ฒฝ
~ ์ผ๋ฐ์ ์ผ๋ก int๊ฐ 4๋ฐ์ดํธ์ด๋ฏ๋ก,
* ๋ณดํต 100๋ง๊ฐ ์ด์ ํฌ๊ธฐ์ ๋ฐฐ์ด์ ์ ์ธํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์ผ๋ฏ๋ก, ์ด๋ฐ ๊ฒฝ์ฐ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ๋ฅผ ๋ค์ ๊ณ ๋ คํด๋ณด์
=> int 2์ต ๊ฐ ์ด์์ผ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ ~ ์ฌ์ ๊ณต๊ฐ์ด ์๋ 1GB์ ๊ฒฝ์ฐ์๋ ์ด๊ณผ ๊ฐ๋ฅ
int์ ์ฐ์ฐ์ด ๊ฐ์ฅ ๋น ๋ฅด๋ฏ๋ก int๋ฅผ ๋ง์ด ์ฌ์ฉํ์ง๋ง, long์ด๋ double์ ์ฌ์ฉํด ๋ ๋์ ๋ฒ์๋ฅผ ํ์ฉํ ์๋ ์๋ค. ๋ค๋ง ์ด ๊ฒฝ์ฐ ์๊ฐ ์ด๊ณผ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค
+ ์ผ๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ ID ๊ฐ์ ํ๋์ ๊ฒฝ์ฐ๋ long์ ๋ง์ด ํ์ฉํจ(ํ์ฅ์ฑ ๊ณ ๋ ค)
** ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๋ ์ ๋ต์ผ๋ก ์ธ์ ๋์ง ์์ผ๋ฏ๋ก ์๊ฐ ๋ณต์ก๋ ๋ฟ๋ง ์๋๋ผ ๊ณต๊ฐ ๋ณต์ก๋๋ ๊ณ ๋ คํด์ผ ํ๋ค
'๊ฐ๋ฐ๊ณต๋ถ > CS๐ป' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
CS ๊ฐ์ 12. ์๊ฐ ์์๊ณผ ์๊ฐ๋ณต์ก๋ (1) | 2023.12.06 |
---|---|
CS ๊ฐ์ 10. HTTP/HTTPS (1) | 2023.11.27 |
CS ๊ฐ์ 9. OSI 7๊ณ์ธต (0) | 2023.11.22 |
CS ๊ฐ์ 8. ์๋ฃ๊ตฌ์กฐ์ ๋์๊ณผ ํ์ฉ (0) | 2023.11.13 |
CS ๊ฐ์ 7. ์๋ฃ์ ์ ์ฅ๊ณผ ํํ (0) | 2023.11.10 |