suvera-dev ๐Ÿฅฆ

Algorithm) Sorting ๋ณธ๋ฌธ

Algorithm/CodingTest - Python

Algorithm) Sorting

suvera 2022. 4. 3. 20:38

๐Ÿ“Œ ์ •๋ ฌ ? ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ •ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ์„œ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ !

- ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๋ฉด ์ด์ง„ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•ด์ง ! ์ด์ง„ํƒ์ƒ‰์˜ ์ „์ฒ˜๋ฆฌ ๊ณผ์ • 

- ์„ ํƒ ์ •๋ ฌ, ์‚ฝ์ž… ์ •๋ ฌ, ํ€ต ์ •๋ ฌ, ๊ณ„์ˆ˜ ์ •๋ ฌ ๋“ฑ์ด ์žˆ๋‹ค 

* ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์˜ˆ์ œ๋ฅผ ์„ค๋ช… , ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•œ ๋’ค ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋’ค์ง‘๊ธฐํ•˜์—ฌ ๋งŒ๋“ค์ˆ˜ ์žˆ๋”ฐ 

 

1. ์„ ํƒ์ •๋ ฌ 

- ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ์—ฌ๋Ÿฌ๊ฐœ ์žˆ๋‹ค๋ฉด, ์ด ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ๋งจ ์•ž์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๊ณ  ๊ทธ ๋‹ค์Œ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ์•ž์—์„œ ๋‘ ๋ฒˆ์จฐ ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณต ! => ๋งค๋ฒˆ ๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ์„ ์„ ํƒ ํ•œ๋‹ค !

- ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์•ž์œผ๋กœ ๋ณด๋‚ด๋Š” ๊ณผ์ •์„ N-1๋ฒˆ ๋ฐ˜๋ณตํ•˜๋ฉด ์ •๋ ฌ์ด ์™„๋ฃŒ ๋œ๋‹ค !

 

array = [7,5,9,0,3,1,6,2,4,8]

for i in range(len(array)):
    min_index = i # ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ์˜ ์ธ๋ฑ์Šค
    for j in range(i+1, len(array)):
        if array[min_index] > array[j]:
            min_index = j 
    array[i], array[min_index] = array[min_index], array[i]

print(array)

 

- ์Šค์™€ํ”„ : ํŠน์ •ํ•œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ๋‘ ๋ณ€์ˆ˜์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—… 

- ํŒŒ์ด์ฌ์—๋Š” ์œ„์ฒ˜๋Ÿผ ๊ฐ„๋‹จํžˆ ๋ฆฌ์ŠคํŠธ ๋‚ด ๋‘ ์›์†Œ์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค ! 

 

๐ŸŸ ์„ ํƒ ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ 

์„ ํƒ ์ •๋ ฌ์€ N-1 ๋ฒˆ ๋งŒํผ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์ฐพ์•„์„œ ๋งจ ์•ž์œผ๋กœ ๋ณด๋‚ด์•ผํ•œ๋‹ค. 

- ๋งค๋ฒˆ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ ๋น„๊ต ์—ฐ์‚ฐ ํ•„์š” : N + N -1 + N -2 ... + 2 

- ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๊ฐ„๋‹จํžˆ O(N^2)

 

2. ์‚ฝ์ž… ์ •๋ ฌ

- ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ ˆํ•œ ์œ„์น˜์— '์‚ฝ์ž…' ํ•œ๋‹ค๋Š” ์˜๋ฏธ

- ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ ํ›จ์”ฌ ํšจ์œจ์  

array = [7,5,9,0,3,1,6,2,4,8]

for i in range(1, len(array)):
    for j in range(i, 0, -1): # ์ธ๋ฑ์Šค i ๋ถ€ํ„ฐ 1๊นŒ์ง€ ๊ฐ์†Œํ•˜๋ฉฐ ๋ฐ˜๋ณตํ•˜๋Š” ๋ฌธ๋ฒ• 
        if array[j] < array[j-1]: # ํ•œ ์นธ์”ฉ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ 
            array[j], array[j-1] = array[j-1], array[j]
        else:
            break

print(array)

๐ŸŸ ์‚ฝ์ž… ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

- O(N^2) : ์„ ํƒ ์ •๋ ฌ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐ˜๋ณต๋ฌธ์ด 2๋ฒˆ ์ค‘์ฒฉ๋˜์–ด ์‚ฌ์šฉ๋จ

 

3. ํ€ต ์ •๋ ฌ

- ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘์— ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

- ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ทธ ๊ธฐ์ค€๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ์™€ ์ž‘์€๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ์ž ! 

- ํ”ผ๋ฒ—์ด ์‚ฌ์šฉ๋œ๋‹ค. ํฐ ์ˆซ์ž์™€ ์ž‘์€ ์ˆซ์ž๋ฅผ ๊ตํ™˜ํ•  ๋•Œ, ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ค€์ด ํ”ผ๋ฒ— !

- ํ€ต ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์—๋Š” ํ”ผ๋ฒ—์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•  ๊ฒƒ์ธ์ง€ ๋ฏธ๋ฆฌ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค. 

- ํ”ผ๋ฒ—์„ ์„ค์ •ํ•˜๊ณ  ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ถ„ํ• ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋Š”๋ฐ, ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๋ถ„ํ•  ๋ฐฉ์‹์€ ํ˜ธ์–ด ๋ถ„ํ• ๋ฐฉ์‹ !

* ํ˜ธ์–ด ๋ถ„ํ•  ๋ฐฉ์‹ : ๋ฆฌ์ŠคํŠธ์—์„œ ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ํ”ผ๋ฒ—์œผ๋กœ ์ •ํ•œ๋‹ค. 

 

=> 5 7 9 0 3 1 6 2 4 8

ํŒŒํŠธ 1

1) ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ : ํ”ผ๋ฒ— - 5

2) ์ดํ›„ ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ 5๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ ์„ ํƒ : 7

3) ์˜ค๋ฅธ์ชฝ์—์„œ ๋ถ€ํ„ฐ 5๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ ์„ ํƒ : 4

4) ์œ„์น˜ ๋ฐ”๊พธ๊ธฐ : 5 4 9 0 3 1 6 2 7 8

5) ๋‹ค์Œ ๋‹ค์‹œ ํ”ผ๋ฒ—๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ : 9

6) ๋‹ค์‹œ ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ : 2

7) ๋ณ€๊ฒฝ : 5 4 2 0 3 1 6 9 7 8

8) ๋‹ค์‹œ ํ”ผ๋ฒ—๋ณด๋‹ค ํฐ๋ฐ์ดํ„ฐ : 6

9) ๋‹ค์‹œ ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ : 1

10) ์„œ๋กœ ์—‡๊ฐˆ๋ ธ๊ธฐ ๋•Œ๋ฌธ์— ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ์™€ ํ”ผ๋ฒ— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝ 

1 4 2 0 3 5 6 9 7 8 : ๋ถ„ํ•  ์™„๋ฃŒ => ํ”ผ๋ฒ—5๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์€ ๋ชจ๋‘ 5๋ณด๋‹ค ์ž‘๊ณ  ์˜ค๋ฅธ์ชฝ์€ ๋ชจ๋‘ 5๋ณด๋‹ค ํฌ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. 

์ด๋ ‡๊ฒŒ ํ”ผ๋ฒ—์˜ ์™ผ์ชฝ์—๋Š” ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ„์น˜ํ•˜๊ณ , ํ”ผ๋ฒ—์˜ ์˜ค๋ฅธ์ชฝ์—๋Š” ํ”ผ๋ฒ—๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ„์น˜ํ•˜๋„๋ก ํ•˜๋Š” ์ž‘์—…์„ ๋ถ„ํ•  ํ˜น์€ ํŒŒํ‹ฐ์…˜์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

ํŒŒํŠธ 2

์œ„์˜ ์ƒํƒœ์—์„œ ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ์™€ ์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ •๋ ฌ์‹œ์ผœ๋ณด์ž. 

์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ์—์„œ๋„ ๋™์ผํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค 1 4 2 0 3 -> 1 0 2 4 3 -> 0 1 2 4 3 -> 0 1 2 3 4

 

ํŒŒํŠธ 3

์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ์—์„œ๋„ ๋™์ผํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ •๋ ฌ :  6 9 7 8 -> 6 8 7 9 -> 6 7 8 9

 

โœ”๏ธ ํ€ต์ •๋ ฌ์—์„œ๋Š” ์ด์ฒ˜๋Ÿผ ํŠน์ •ํ•œ ๋ฆฌ์ŠคํŠธ์—์„œ ํ”ผ๋ฒ—์„ ์„ค์ •ํ•˜์—ฌ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•œ ์ดํ›„์—, ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ์™€ ์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ๊ฐ ๋‹ค์‹œ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ ! ์žฌ๊ท€ํ•จ์ˆ˜์™€ ๋™์ž‘์›๋ฆฌ๊ฐ€ ๊ฐ™์Šต๋‹ˆ๋‹น ! ๊ทธ๋ ‡๋‹ค๋Š” ๊ฒƒ์€, ์ข…๋ฃŒ ์กฐ๊ฑด์ด ์žˆ์–ด์•ผ ํ•  ๊ฒƒ 

 

โœ”๏ธ ํ€ต ์ •๋ ฌ์˜ ์ข…๋ฃŒ ์กฐ๊ฑด์€ ? ํ˜„์žฌ ๋ฆฌ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ 1๊ฐœ์ธ ๊ฒฝ์šฐ . ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๊ฐ€ 1๊ฐœ๋ผ๋ฉด, ์ด๋ฏธ ์ •๋ ฌ์ด ๋˜์–ด์žˆ๋‹ค๊ณ  ๊ฐ„์ฃผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ถ„ํ• ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

array = [5,7,9,0,3,1,6,2,4,8]

def quick_sort(array, start, end):
    if start >= end: # ์›์†Œ๊ฐ€ 1๊ฐœ์ธ ๊ฒฝ์šฐ ์ข…๋ฃŒ
        return
    pivot = start
    left = start + 1
    right = end
    while left <= right:
        # ํ”ผ๋ฒ—๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
        while left <= end and array[left] <= array[pivot]:
            left += 1
        # ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
        while right > start and array[right] >= array[pivot]:
            right -= 1
        if left > right: # ์—‡๊ฐˆ๋ ธ๋‹ค๋ฉด ์ž‘์€ ๋ฐ์ดํ„ฐ์™€ ํ”ผ๋ฒ—์„ ๊ต์ฒด
            array[right], array[pivot] = array[pivot], array[right]
        else: # ์—‡๊ฐˆ๋ฆฌ์ง€ ์•Š์•˜๋‹ค๋ฉด ์ž‘์€ ๋ฐ์ดํ„ฐ์™€ ํฐ ๋ฐ์ดํ„ฐ ๊ต์ฒด
            array[left], array[right] = array[right], array[left]
    # ๋ถ„ํ•  ์ดํ›„ ์™ผ์ชฝ ๋ถ€๋ถ„๊ณผ ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์—์„œ ๊ฐ๊ฐ ์ •๋ ฌ ์ˆ˜ํ–‰ 
    quick_sort(array, start, right - 1)
    quick_sort(array, right + 1, end)
    
quick_sort(array, 0 , len(array) - 1)
print(array)

 

array2 = [5,7,9,0,3,1,6,2,4,8]

def quick_sort(array):
    # ๋ฆฌ์ŠคํŠธ๊ฐ€ ํ•˜๋‚˜ ์ดํ•˜์˜ ์›์†Œ๋งŒ์„ ๋‹ด๊ณ  ์žˆ๋‹ค๋ฉด ์ข…๋ฃŒ 
    if len(array) <= 1:
        return array
    
    pivot = array[0] # ํ”ผ๋ฒ—์€ ์ฒซ ๋ฒˆ์งธ ์›์†Œ
    tail = array[1:] # ํ”ผ๋ฒ—์„ ์ œ์™ธํ•œ ๋ฆฌ์ŠคํŠธ 
    
    left_side = [x for x in tail if x <= pivot] # ๋ถ„ํ• ๋œ ์™ผ์ชฝ ๋ถ€๋ถ„
    right_side = [x for x in tail if x > pivot] # ๋ถ„ํ• ๋œ ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„ 
    
    # ๋ถ„ํ•  ์ดํ›„ ์™ผ์ชฝ ๋ถ€๋ถ„๊ณผ ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์—์„œ ๊ฐ๊ฐ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์ „์ฒด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ 
    return quick_sort(left_side) + [pivot] + quick_sort(right_side)

print(quick_sort(array))

- ํŒŒ์ด์ฌ์˜ ์žฅ์ ์„ ์‚ด๋ฆฐ ํ€ต ์ •๋ ฌ ์†Œ์Šค์ฝ”๋“œ 

 

๐ŸŸ ํ€ต ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

- O(NlogN)

 

4. ๊ณ„์ˆ˜ ์ •๋ ฌ

- ํŠน์ •ํ•œ ์กฐ๊ฑด์ด ๋ถ€ํ•ฉํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋งค์šฐ ๋น ๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ 

- ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์–‘์˜ ์ •์ˆ˜์ธ ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด๋ณด์ž. ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ N, ๋ฐ์ดํ„ฐ ์ค‘ ์ตœ๋Œ“๊ฐ’์ด k ์ผ๋•Œ, ๊ณ„์ˆ˜์ •๋ ฌ์€ ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ ์ˆ˜ํ–‰ ์‹œ๊ฐ„ O(N+K) ๋ฅผ ๋ณด์žฅํ•œ๋‹ค. 

- ๋‹ค๋งŒ, ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋˜์–ด ์ •์ˆ˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

- ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์ด ๋ฌดํ•œํ•œ ๋ฒ”์œ„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์‹ค์ˆ˜ํ˜• ๋ฐ์ดํ„ฐ๊ฐ€ ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ ๊ณ„์ˆ˜์ •๋ ฌ์€ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค. 

 

- ์˜ˆ๋ฅผ ๋“ค์–ด, 0์ด์ƒ 100์ดํ•˜์ธ ์„ฑ์  ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•  ๋•Œ ๊ณ„์ˆ˜์ •๋ ฌ์ด ํšจ๊ณผ์ ์ด๋‹ค ! 

- ๋‹ค๋งŒ, ๊ฐ€์žฅ ํฐ ๋ฐ์ดํ„ฐ์™€ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์ฐจ์ด๊ฐ€ ๋„ˆ๋ฌด ํฌ๋‹ค๋ฉด ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

- ์™œ? ๊ณ„์ˆ˜ ์ •๋ ฌ์„ ์ด์šฉํ•  ๋•Œ์—๋Š” ๋ชจ๋“  ๋ฒ”์œ„๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ์–ธํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

- ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณ„๋„์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ทธ ์•ˆ์— ์ •๋ ฌ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๋Š”๋‹ค !

 

1) ๊ฐ€์žฅ ํฐ ๋ฐ์ดํ„ฐ์™€ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ณ , ๋ฆฌ์ŠคํŠธ์˜ ์ธ๋ฑ์Šค๊ฐ€ ๋ชจ๋“  ๋ฒ”์œ„๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋„๋กํ•œ๋‹ค.

2) ๋ฆฌ์ŠคํŠธ๋ฅผ 0์ด ๋˜๋„๋ก ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. 

3) ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’๊ณผใ… ๋™์ผํ•œ ์ธ๋ฑ์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ๊ณ„์ˆ˜ ์ •๋ ฌ ์™„๋ฃŒ !

4) ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅ

 

# ๋ชจ๋“  ์›์†Œ์˜ ๊ฐ’์ด 0๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๊ณ  ๊ฐ€์ •
array = [7,5,9,0,3,1,6,2,9,1,4,8,0,5,2]

# ๋ชจ๋“  ๋ฒ”์œ„๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฆฌ์ŠคํŠธ ์„ ์–ธ - 0์œผ๋กœ ์ดˆ๊ธฐํ™”
count = [0] * (max(array)+1)

for i in range(len(array)):
    count[array[i]] += 1 # ๊ฐ ๋ฐ์ดํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” ์ธ๋ฑ์Šค์˜ ๊ฐ’ ์ฆ๊ฐ€

for i in range(len(count)): # ๋ฆฌ์ŠคํŠธ์— ๊ธฐ๋ก๋œ ์ •๋ ฌ ์ •๋ณด ํ™•์ธ
    for j in range(count[i]):
        print(i, end=' ') # ๋„์–ด์“ฐ๊ธฐ๋ฅผ ๊ตฌ๋ถ„์œผ๋กœ ๋“ฑ์žฅํ•œ ํšŸ์ˆ˜๋งŒํผ ์ธ๋ฑ์Šค ์ถœ๋ ฅ 

๐ŸŸ ํ€ต ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

- O(N + K)

 

** ๊ณ„์ˆ˜์ •๋ ฌ์€ ๋•Œ์— ๋”ฐ๋ผ์„œ ์‹ฌ๊ฐํ•œ ๋น„ํšจ์œจ์„ฑ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ํ•œ์ • ๋˜์–ด์žˆ๊ณ , ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ๋งŽ์ด ์ค‘๋ณต๋˜์–ด ์žˆ์„์ˆ˜๋ก ์œ ๋ฆฌํ•˜๋ฉฐ ํ•ญ์ƒ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†๋‹ค. 

 

 


ํŒŒ์ด์ฌ์˜ ์ •๋ ฌ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ 

- ํŒŒ์ด์ฌ์€ ๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ sorted() ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•œ๋‹ค. 

- sorted()๋Š” ํ€ต ์ •๋ ฌ๊ณผ ๋™์ž‘๋ฐฉ์‹์ด ๋น„์Šทํ•œ ๋ณ‘ํ•ฉ ์ •๋ ฌ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง !

- array.sort() : ๋ณ„๋„์˜ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๊ณ  ๋‚ด๋ถ€ ์›์†Œ๊ฐ€ ๋ฐ”๋กœ ์ •๋ ฌ 

- sorted() ๋‚˜ sort()๋ฅผ ์ด์šฉํ•  ๋•Œ์—๋Š” key ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. key ๊ฐ’์œผ๋กœ๋Š” ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ€์•ผํ•˜๋ฉฐ ์ด๋Š” ์ •๋ ฌ ๊ธฐ์ค€์ด ๋œ๋‹ค !

array = [('๋ฐ”๋‚˜๋‚˜',2), ('์‚ฌ๊ณผ',5), ('๋‹น๊ทผ',3)]

def setting(data):
	return data[1]
    
result = sorted(array, key=setting)
print(result)

# [('๋ฐ”๋‚˜๋‚˜',2), ('๋‹น๊ทผ',3), ('์‚ฌ๊ณผ',5)]

- ์‹œ๊ฐ„๋ณต์žก๋„ : O(NlogN) 

 


์ฝ”ํ…Œ์—์„œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ 3๊ฐ€์ง€ !

 

1. ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ 

2. ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์›๋ฆฌ์— ๋Œ€ํ•ด์„œ ๋ฌผ์–ด๋ณด๋Š” ๋ฌธ์ œ 

3. ๋” ๋น ๋ฅธ ์ •๋ ฌ์ด ํ•„์š”ํ•œ ๋ฌธ์ œ 

Comments