Home > CS > 2024 > ๐Ÿ’พ [CS] ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity)๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

๐Ÿ’พ [CS] ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity)๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?
CS

๐Ÿ’พ [CS] ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity)๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

  • ์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity)๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ž…๋ ฅ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์‹คํ–‰ํ•˜๋Š” ์—ฐ์‚ฐ์˜ ์ˆ˜๋ฅผ ์ธก์ •ํ•˜๋Š” ์ง€ํ‘œ๋กœ, ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํšจ์œจ์„ฑ์„ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity)๋Š” ์ฃผ๋กœ ์ž…๋ ฅ ํฌ๊ธฐ(n)๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹คํ–‰์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ ์ฆ๊ฐ€ํ•˜๋Š” ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋น…-์˜ค ํ‘œ๊ธฐ๋ฒ•(Big-O Notaion)์œผ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.

1๏ธโƒฃ ์™œ ์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity)๊ฐ€ ์ค‘์š”ํ•œ๊ฐ€์š”?

1๏ธโƒฃ ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„.

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํšจ์œจ์„ฑ์„ ํ‰๊ฐ€ํ•  ๋•Œ, ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์–ผ๋งˆ๋‚˜ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ ๋˜๋Š”์ง€๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity)๋ฅผ ํ†ตํ•ด ์•Œ๊ณ ๋ฆฌ์ฆ˜(Algorithm)์˜ ์„ฑ๋Šฅ์„ ๋น„๊ตํ•˜๊ณ , ๋” ๋‚˜์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Algorithm)์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๏ธโƒฃ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ.

  • ์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ์€ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
    • ์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity)๊ฐ€ ๋†’์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Algorithm)์€ ํฐ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‹คํ–‰ ์‹œ๊ฐ„์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•˜์—ฌ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3๏ธโƒฃ ์„ฑ๋Šฅ ์˜ˆ์ธก.

  • ์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity)๋ฅผ ์•Œ๋ฉด ์ž…๋ ฅ ํฌ๊ธฐ ๋ณ€ํ™”์— ๋”ฐ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ์ตœ์ ํ™”ํ•  ๋ถ€๋ถ„์„ ์‹๋ณ„ํ•˜๊ณ , ๋” ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๏ธโƒฃ ์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity)์˜ ๊ธฐ๋ณธ ๊ฐœ๋….

  • ์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity)๋Š” ์ž…๋ ฅ ํฌ๊ธฐ(n)์— ๋”ฐ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋ณธ ์—ฐ์‚ฐ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ ˆ๋Œ€์ ์ธ ์ดˆ ๋‹จ์œ„๋กœ ์ธก์ •ํ•˜์ง€ ์•Š๊ณ , ์—ฐ์‚ฐ ํšŸ์ˆ˜๋กœ ์ถ”์ƒํ™”ํ•˜์—ฌ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋Š” ํ•˜๋“œ์›จ์–ด ์„ฑ๋Šฅ์— ๋”ฐ๋ผ ์‹ค์ œ ์‹œ๊ฐ„์€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์—ฐ์‚ฐ ํšŸ์ˆ˜๋Š” ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity)๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋ฉฐ, ์ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜(Algorithm)์˜ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ ๋น…-์˜ค ํ‘œ๊ธฐ๋ฒ•(Big-O Notation)

  • ๋น…-์˜ค ํ‘œ๊ธฐ๋ฒ•(Big-O Notation)์€ ์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity)๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์ž…๋ ฅ ํฌ๊ธฐ(n)๊ฐ€ ์ฆ๊ฐ€ํ•  ๋•Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹คํ–‰ ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ๋น ๋ฅด๊ฒŒ ์ฆ๊ฐ€ํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

1๏ธโƒฃ ์ฃผ์š” ๋น…-์˜ค ํ‘œ๊ธฐ๋ฒ•.

1๏ธโƒฃ O(1) ๐Ÿ‘‰ ์ƒ์ˆ˜ ์‹œ๊ฐ„(Constant Time)

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹คํ–‰ ์‚ฌ๊ฐ„์ด ์ž…๋ ฅ ํฌ๊ธฐ์™€ ์ƒ๊ด€์—…์‹œ ์ผ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ: ๋ฐฐ์—ด์˜ ํŠน์ • ์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•˜๊ธฐ(์˜ˆ: arr[0])

2๏ธโƒฃ O(lon g) ๐Ÿ‘‰ ๋กœ๊ทธ ์‹œ๊ฐ„(Longarithmic Time)

  • ์ž…๋ ฅ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ ์ˆ˜๋ก ์‹คํ–‰ ์‹œ๊ฐ„์ด ์™„๋งŒํ•˜๊ฒŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ: ์ด์ง„ ํƒ์ƒ‰(Binary Search)

3๏ธโƒฃ O(n) ๐Ÿ‘‰ ์„ ํ˜• ์‹œ๊ฐ„(Linear Time)

  • ์ž…๋ ฅ ํฌ๊ธฐ์— ๋น„๋ก€ํ•˜์—ฌ ์‹คํ–‰ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ: ๋ฐฐ์—ด์—์„œ ํŠน์ • ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ์š”์†Œ๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒฝ์šฐ.

4๏ธโƒฃ O(n log n) ๐Ÿ‘‰ ์„ ํ˜• ๋กœ๊ทธ ์‹œ๊ฐ„(Linearithmic Time)

  • ์„ ํ˜• ์‹œ๊ฐ„๋ณด๋‹ค ๋” ๋ณต์žกํ•œ ์‹œ๊ฐ„ ๋ณต์žก๋„.
    • ์ผ๋ฐ˜์ ์œผ๋กœ ํšจ์œจ์ ์ธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ: ํ€ต ์ •๋ ฌ(Quick Sort), ๋ณ‘ํ•ฉ ์ •๋ ฌ(Merge Sort)

5๏ธโƒฃ O(n^2) ๐Ÿ‘‰ ์ด์ฐจ ์‹œ๊ฐ„(Quadratic Time)

  • ์ž…๋ ฅ ํฌ๊ธฐ์— ๋Œ€ํ•ด ์ œ๊ณฑ์— ๋น„๋ก€ํ•˜์—ฌ ์‹คํ–‰ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    • ์ผ๋ฐ˜์ ์œผ๋กœ ์ค‘์ฒฉ๋œ ๋ฐ˜๋ณต๋ฌธ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ: ๋ฒ„๋ธ” ์ •๋ ฌ(Bubble Sort), ์‚ฝ์ž… ์ •๋ ฌ(Insertion Sort)

6๏ธโƒฃ O(2^n) ๐Ÿ‘‰ ์ง€์ˆ˜ ์‹œ๊ฐ„(Exponential Time)

  • ์ž…๋ ฅ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์‹คํ–‰ ์‹œ๊ฐ„์ด ์ง€์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ณดํ†ต ์ž…๋ ฅ ํฌ๊ธฐ๊ฐ€ ์ž‘์„ ๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ: ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ์žฌ๊ท€์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

7๏ธโƒฃ O(n!) ๐Ÿ‘‰ ํŒฉํ† ๋ฆฌ์–ผ ์‹œ๊ฐ„(Factorial Time)

  • ์ž…๋ ฅ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์‹คํ–‰ ์‹œ๊ฐ„์ด ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฃผ๋กœ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์ˆœ์—ด์„ ๊ณ„์‚ฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ: ์ˆœ์—ด(permutation) ์ƒ์„ฑ.

4๏ธโƒฃ ์‹œ๊ฐ„ ๋ณต์žก๋„์˜ ์˜ˆ์‹œ.

1๏ธโƒฃ O(1) ๐Ÿ‘‰ ์ƒ์ˆ˜ ์‹œ๊ฐ„.

int getFirstElement(int[] arr) {
    return arr[0]; // ์ž…๋ ฅ ํฌ๊ธฐ์™€ ์ƒ๊ด€์—†์ด ์ผ์ •ํ•œ ์‹œ๊ฐ„
}

2๏ธโƒฃ O(n) ๐Ÿ‘‰ ์„ ํ˜• ์‹œ๊ฐ„.

int sum(int[] arr) {
    int sum = 0;
    for (int num : arr) {
        sum += num; // ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ˆœํšŒ
    }
    return sum;
}

3๏ธโƒฃ O(n^2) ๐Ÿ‘‰ ์ด์ฐจ ์‹œ๊ฐ„.

void printPairs(int[] arr) {
    for(int i = 0; i < arr.length; i++) {
        for(int j = 0; j < arr.length; j++) {
            System.out.println(arr[i] + ", " + arr[j]); // ์ค‘์ฒฉ๋œ ๋ฐ˜๋ณต๋ฌธ
        }
    }
}

5๏ธโƒฃ ์‹œ๊ฐ„ ๋ณต์žก๋„ ๋ถ„์„ ๋ฐฉ๋ฒ•.

1๏ธโƒฃ ๋ฐ˜๋ณต๋ฌธ.

  • ๋ฐ˜๋ณต๋ฌธ์ด ํ•œ ๋ฒˆ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค O(n).
    • ์ค‘์ฒฉ๋œ ๋ฐ˜๋ณต๋ฌธ O(n^2), O(n^3)์™€ ๊ฐ™์€ ๋” ๋†’์€ ์ฐจ์ˆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

2๏ธโƒฃ ์กฐ๊ฑด๋ฌธ.

  • if-else ์กฐ๊ฑด๋ฌธ์€ ์ž…๋ ฅ ํฌ๊ธฐ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ O(1)

3๏ธโƒฃ ์žฌ๊ท€ ํ˜ธ์ถœ.

  • ์žฌ๊ท€ ํ•จ์ˆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ๊นŠ์ด์™€ ๊ฐ ํ˜ธ์ถœ์˜ ์ž‘์—…์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.
    • ํ”ผ๋ณด๋‚˜์น˜ ์žฌ๊ท€ ํ•จ์ˆ˜๋Š” O(2^n) ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

4๏ธโƒฃ ์—ฐ์‚ฐ.

  • ์ผ๋ฐ˜์ ์ธ ์‚ฐ์ˆ  ์—ฐ์‚ฐ, ๋น„๊ต, ํ• ๋‹น ๋“ฑ์€ O(1)

6๏ธโƒฃ ์‹œ๊ฐ„ ๋ณต์žก๋„ ์˜ˆ์ธก์˜ ์ค‘์š”์„ฑ.

  • ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ž˜ ์ดํ•ดํ•˜๋ฉด, ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ•  ๋•Œ ํšจ์œจ์„ฑ์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‚˜ ์‹ค์ œ ๊ฐœ๋ฐœ์—์„œ๋„ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ์ค‘์š”ํ•œ๋ฐ, ์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity)๋ฅผ ํ†ตํ•ด ์ž…๋ ฅ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ• ์ง€ ๋ฏธ๋ฆฌ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

7๏ธโƒฃ ์š”์•ฝ.

  • ์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity)๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ž…๋ ฅ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์–ผ๋งˆ๋‚˜ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•˜๋Š”์ง€๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ์ง€ํ‘œ๋กœ, ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํšจ์œจ์„ฑ์„ ๋น„๊ตํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋น…-์˜ค ํ‘œ๊ธฐ๋ฒ•(Big-O Notation)์€ ์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity)๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ์„ ์ถ”์ƒ์ ์ด๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ด์˜ค, ์ž…๋ ฅ ํฌ๊ธฐ ๋ณ€ํ™”์— ๋”ฐ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋™์ž‘์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค.
  • ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„์— ๋Œ€ํ•œ ๊นŠ์€ ์ดํ•ด๊ฐ€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.