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

๐Ÿฅด์•Œ๊ณ ๋ฆฌ์ฆ˜/์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ก 

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ก ] ์ •๋ ฌ(์„ ํƒ์ •๋ ฌ, ์‚ฝ์ž…์ •๋ ฌ, ํ€ต์ •๋ ฌ, ๊ณ„์ˆ˜์ •๋ ฌ)

โšก๏ธ ์„ ํƒ์ •๋ ฌ

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

#์„ ํƒ์ •๋ ฌ
arr = list(map(int, input().split()))

for i in range(len(arr)):
    min_index = i
    for j in range(i + 1, len(arr)):
        if arr[j] < arr[min_index] :
            min_index = j
    arr[i], arr[min_index] = arr[min_index], arr[i] #swap

print(arr)

 

โžฐ์„ ํƒ์ •๋ ฌ์˜ ์‹œ๊ฐ„๋ณต์žก๋„ = O(n^2)

โšก๏ธ ์‚ฝ์ž…์ •๋ ฌ

2๋ฒˆ์งธ ์›์†Œ๋ถ€ํ„ฐ ์ •๋ ฌ์‹œ์ž‘. ์ž์‹ ์˜ ์•ž ์ธ๋ฑ์Šค ์ˆซ์ž์— ์ž๊ธฐ ์ž์‹ ๋ณด๋‹ค ์ž‘์€ ์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ ๋’ค์— ์‚ฝ์ž…. 2 ~ n ๊นŒ์ง€ ๋ฐ˜๋ณต

#์‚ฝ์ž…์ •๋ ฌ
arr = list(map(int, input().split()))

for i in range(2, len(arr)):
    for j in range(i, 0, -1):
        if arr[j] < arr[j - 1] :
            arr[j], arr[j - 1] = arr[j - 1], arr[j] #swap
        else :
            break

print(arr)

โžฐ์‚ฝ์ž…์ •๋ ฌ์˜ ์‹œ๊ฐ„๋ณต์žก๋„ = O(n^2)

์‚ฝ์ž…์ •๋ ฌ์€ ์ตœ์„ ์˜ ๊ฒฝ์šฐ O(n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง. ์‚ฝ์ž…์ •๋ ฌ์€ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•  ๋•Œ ๋งค์šฐ ๋น ๋ฅด๋‹ค. (์ด๊ฒฝ์šฐ,  ํ€ต ์ •๋ ฌ๋ณด๋‹ค๋„ ๋น ๋ฆ„)

โšก๏ธ ํ€ต์ •๋ ฌ

: ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž„

๊ธฐ์ค€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•œ ํ›„ ๊ธฐ์ค€๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ์™€ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•จ. 

๊ธฐ์ค€ ๋ฐ์ดํ„ฐ๋ฅผ pivot์ด๋ผ๊ณ  ํ•จ.

 

๐Ÿ‘€ ๋™์ž‘๊ณผ์ •

1๏ธโƒฃ ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๊ฐ€ ํ”ผ๋ฒ—์ด ๋จ.

5 7 1 4 9 2 4 6 9 3

 

2๏ธโƒฃ ํ”ผ๋ฒ— ์„ค์ • ํ›„ ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ํ”ผ๋ฒ—๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ๋ฅผ, ์˜ค๋ฅธ์ชฝ์—์„œ๋ถ€ํ„ฐ ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•จ

5 7(์™ผ์ชฝ) 1 4 9 2 4 6 9 3 (์˜ค๋ฅธ์ชฝ)

 

3๏ธโƒฃ ๋‘ ๋ฐ์ดํ„ฐ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝ

5 3 1 4 9 2 4 6 9 7

 

์œ„์˜ ๊ณผ์ •1,2,3์„ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์ด ๊ต์ฐจํ•˜์ง€ ์•Š์„๋™์•ˆ ๋ฐ˜๋ณตํ•จ

1๏ธโƒฃ 5 3 1 4 9 2 4 6 9 7

2๏ธโƒฃ 5 3 1 4 9 2 4 6 9 7

3๏ธโƒฃ 5 3 1 4 4 2 9 6 9 7

 

1๏ธโƒฃ 5 3 1 4 4 2 9 6 9 7

2๏ธโƒฃ 5 3 1 4 4 2 9 6 9 7   

-->โ—๏ธ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ์ฐพ์€ ๋ฐ์ดํ„ฐ์™€ ์˜ค๋ฅธ์ชฝ์—์„œ๋ถ€ํ„ฐ ์ฐพ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์„œ๋กœ ์—‡๊ฐˆ๋ฆผ

์˜ค๋ฅธ์ชฝ์—์„œ๋ถ€ํ„ฐ ์ฐพ์€ ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ์™€ ํ”ผ๋ฒ—์˜ ์œ„์น˜๋ฅผ ์„œ๋กœ ๋ฐ”๊ฟ”์คŒ

2 3 1 4 4 5 9 6 9 7 

ํ”ผ๋ฒ—์˜ ์™ผ์ชฝ์—๋Š” ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ์ˆ˜๋งŒ, ์˜ค๋ฅธ์ชฝ์—๋Š” ํฐ ์ˆ˜๋งŒ์ด ์œ„์น˜ํ•˜๊ฒŒ ๋จ. ํ”ผ๋ฒ—์ด์—ˆ๋˜ 5๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ๊ณผ์ • 1, 2, 3์„ ํ†ตํ•ด ์ •๋ ฌํ•จ.

1๏ธโƒฃ 2 3 1 4 4  | 5 |  1๏ธโƒฃ 9 6 9 7 

2๏ธโƒฃ 2 3 1 4 4  | 5 |  2๏ธโƒฃ 9 6 9 7 

3๏ธโƒฃ 2 1 3 4 4  | 5 3๏ธโƒฃ 9 6 7 9

 

1๏ธโƒฃ 2 1 3 4 4  | 5  1๏ธโƒฃ 9 6 7 9

2๏ธโƒฃ 2 3 4 4  | 5  2๏ธโƒฃ 9 6 7 9 ํฐ์ˆ˜์—†์Œ(๊ต์ฐจ๋œ๊ฑฐ๋ž‘ ๋˜‘๊ฐ™์ด ํ•˜๋ฉด๋จ)

โ—๏ธ 1 2 3 4 4  | 5 | โ—๏ธ 7 6 9 9

 

1๏ธโƒฃ 1   | 2 |  1๏ธโƒฃ 3 4 4    | 5 |    1๏ธโƒฃ 7 6   | 9 |   1๏ธโƒฃ 9  

#ํ”ผ๋ฒ— ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋‚˜๋ˆˆ ํ›„ ๋‹ค์‹œ ํ€ต์†ŒํŠธ๋ฅผ ํ• ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๋ฐ–์— ์—†์œผ๋ฉด ๊ทธ๋ƒฅ ๋ฆฌํ„ด

 1  | 2 |  1๏ธโƒฃ 3 4 4    | 5 |    1๏ธโƒฃ 7 6   | 9 | 

1  | 2 2๏ธโƒฃ 3 4 4    | 5 |    2๏ธโƒฃ 7 6   | 9 | 

1  | 2 โ—๏ธ 3 4 4 (ํ”ผ๋ฒ—๊ณผ ์ž‘์€์ˆ˜๊ฐ€ ๊ฐ™์€ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ์ƒํƒœ)   | 5 |    โ—๏ธ 6 7   | 9 | 

 

1  | 2 3 | 1๏ธโƒฃ 4 4  | 5 |  6  | 7  | 9 | 9  (๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜ ๋‚จ์€ ๊ฑด ์ •๋ ฌ๋œ ๊ฒƒ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฆฌํ„ด~)

1  | 2 3 | 2๏ธโƒฃ 4 4  | 5 |  6  | 7  | 9 | 9

1  | 2 3 | โ—๏ธ 4 4 (ํ”ผ๋ฒ—๊ณผ ์ž‘์€์ˆ˜๊ฐ€ ๊ฐ™์€ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ์ƒํƒœ) | 5 |  6  | 7  | 9 | 9

 

1  | 2 3 | 4 | 4 | 5 |  6  | 7  | 9 | 9

 

์™€์•„์•„ใ…์•„ ์ •๋ ฌ ๋!!๐Ÿ‘ปใ…Žใ…Žใ…Ž

 

โžฐํ€ต์ •๋ ฌ์˜ ํ‰๊ท  ์‹œ๊ฐ„๋ณต์žก๋„ = O(nlogn)

โžฐํ€ต์ •๋ ฌ ์ตœ์•…์˜ ๊ฒฝ์šฐ์ผ ๋•Œ, ์‹œ๊ฐ„๋ณต์žก๋„ = O(n^2)

โœ๏ธ ํ€ต์ •๋ ฌ์ด ์ตœ์•…์˜ ๊ฒฝ์šฐ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์งˆ ๋•Œ๋Š”, ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋ถ€ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ์ž„.

โœ๏ธ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๋ผ๋ฉด ์‚ฝ์ž…์ •๋ ฌ์ด ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•จ. ์ „ํ˜€ ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ํ€ต์ •๋ ฌ์„ ์‚ฌ์šฉ.

โœ๏ธ ํŒŒ์ด์ฌ์˜ ๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, nlogn์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋ณด์žฅํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์–ธ์ œ๋“  ์‚ฌ์šฉํ•ด๋„๋จใ…Žใ…Ž

#ํ€ต์ •๋ ฌ
arr = list(map(int, input().split()))

def quick_sort(arr, start, end):
    if start >= end:
        return
    pivot = start    #1๏ธโƒฃ
    left = start + 1
    right = end
    while left <= right:
        #2๏ธโƒฃ
        while left <= end and arr[left] <= arr[pivot]:
            left += 1
        while right > start and arr[right] >= arr[pivot]:
            right -= 1
        if left > right: #โ—๏ธ
            arr[right], arr[pivot] = arr[pivot], arr[right]
        else: #3๏ธโƒฃ
            arr[left], arr[right] = arr[right], arr[left]
    quick_sort(arr, start, right - 1)
    quick_sort(arr, right + 1, end)

quick_sort(arr, 0, len(arr) - 1)
print(arr)

 

โšก๏ธ ๊ณ„์ˆ˜์ •๋ ฌ

: ํŠน์ •ํ•œ ์กฐ๊ฑด์ด ์žˆ์„ ๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์–‘์˜ ์ •์ˆ˜์—ฌ์•ผํ•จ. ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„๊ฐ€ ๋„ˆ๋ฌด ํฌ๋ฉด ์•ˆ๋จ(์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ€์žฅ ํฐ ๋ฐ์ดํ„ฐ์™€ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์ฐจ์ด๊ฐ€ 1,000,000์„ ๋„˜์ง€ ์•Š์„ ๋•Œ ํšจ๊ณผ์ )

โžฐ ๊ณ„์ˆ˜์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ n, ๋ฐ์ดํ„ฐ์˜ ์ตœ๋Œ“๊ฐ’์ด k์ผ ๋•Œ, O(n + k)๋ฅผ ๋ณด์žฅ

 

๊ณ„์ˆ˜์ •๋ ฌ ๋™์ž‘ ๋ฐฉ๋ฒ• : ๋ชจ๋“  ๋ฒ”์œ„๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ์–ธํ•จ. ๋ฆฌ์ŠคํŠธ์˜ ์ธ๋ฑ์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๊ฐ’์ด ๋˜๊ณ  ๋ฆฌ์ŠคํŠธ ์•ˆ์˜ ๊ฐ’์ด ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋จ.

ex) ์ตœ๋Œ“๊ฐ’์ด 5๋ผ๊ณ  ๊ฐ€์ • (์ตœ๋Œ“๊ฐ’์ด K์ผ ๋•Œ K + 1์นธ์˜ ๋ฐฐ์—ด ์„ ์–ธํ•˜๊ธฐ)

๋ฐ์ดํ„ฐ : 5 5 3 2 4 4 0 0

arr[0] = 2

arr[1] = 0

arr[2] = 1

arr[3] = 1

arr[4] = 2

arr[5] = 2

 

#๊ณ„์ˆ˜์ •๋ ฌ
data = list(map(int, input().split()))

arr = [0] * (max(data) + 1)
for i in range(len(data)):
    arr[data[i]] += 1

for i in range(len(arr)):
    for j in range(arr[i]):
        print(i, end = ' ')

โžฐ ๊ณ„์ˆ˜์ •๋ ฌ์˜ ๊ณต๊ฐ„๋ณต์žก๋„ = O(n + k)

 

โšก๏ธ ํŒŒ์ด์ฌ์˜ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

1. sorted() : ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์คŒ. ์ง‘ํ•ฉ์ด๋‚˜ ๋”•์…”๋„ˆ๋ฆฌ ์ž๋ฃŒํ˜•์„ ์ž…๋ ฅ ๋ฐ›์•„๋„ ๋ฐ˜ํ™˜์€ ๋ฆฌ์ŠคํŠธ๋กœ ํ•ด์คŒ. ํ•ญ์ƒ nlogn์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋ณด์žฅ.

2. sort() : ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด์˜ ๋‚ด์žฅํ•จ์ˆ˜์ž„. ๋ณ„๋„์˜ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ž…๋ ฅ๋ฐ›์€ ๋ฆฌ์ŠคํŠธ ๋‚ด๋ถ€๋ฅผ ๋ฐ”๋กœ ์ •๋ ฌ์‹œํ‚ด.