๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๊ฐœ๋ฐœ๊ณต๋ถ€/CS๐Ÿ’ป

CS ๊ฐ•์˜ 11. ๊ณต๊ฐ„ ์ž์›๊ณผ ๊ณต๊ฐ„ ๋ณต์žก๋„

728x90

์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

 

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

 

CS ๊ฐ•์˜ 3. ํ”„๋กœ์„ธ์Šค ์ƒ๋ช…์ฃผ๊ธฐ์™€ ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ

์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ 0. ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ”„๋กœ์„ธ์Šค 0-1. ํ”„๋กœ๊ทธ๋žจ์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ณณ : ๋ณด์กฐ ๊ธฐ์–ต์žฅ์น˜ 0-2. ํ”„๋กœ๊ทธ๋žจ์ด ๋กœ๋”ฉ๋˜๋Š” ๊ณณ : ์ฃผ ๊ธฐ์–ต์žฅ์น˜ 0-3. ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ์ฃผ์ฒด : ํ”„๋กœ์„ธ์Šค 0-4. ์ž‘์—…์„

cdaosldk.tistory.com

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

 

์ฝ”๋”ฉ๊ต์œก ํ‹ฐ์”จํ”ผ์Šค์ฟจ

4์ฐจ์‚ฐ์—…ํ˜๋ช…, ์ฝ”๋”ฉ๊ต์œก, ์†Œํ”„ํŠธ์›จ์–ด๊ต์œก, ์ฝ”๋”ฉ๊ธฐ์ดˆ, SW์ฝ”๋”ฉ, ๊ธฐ์ดˆ์ฝ”๋”ฉ๋ถ€ํ„ฐ ์ž๋ฐ” ํŒŒ์ด์ฌ ๋“ฑ

tcpschool.com

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์„ ๋งŽ์ด ํ™œ์šฉํ•จ(ํ™•์žฅ์„ฑ ๊ณ ๋ ค)

 

** ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋„ ์ •๋‹ต์œผ๋กœ ์ธ์ •๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ณต๊ฐ„ ๋ณต์žก๋„๋„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค

728x90