์ •๋ ฌ

์ˆ˜ ๋นˆยท2022๋…„ 1์›” 13์ผ
0
post-thumbnail

๐Ÿ“ ์ •๋ ฌ

์ •๋ ฌ์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ •ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ์„œ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ
์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ด์ง„ ํƒ์ƒ‰์˜ ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์ด๊ธฐ๋„ ํ•จ

์„ ํƒ ์ •๋ ฌ, ์‚ฝ์ž… ์ •๋ ฌ, ํ€ต ์ •๋ ฌ, ๊ณ„์ˆ˜ ์ •๋ ฌ

์ฐธ๊ณ ) ํŒŒ์ด์ฌ์—์„œ๋Š” ํŠน์ •ํ•œ ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๋ฅผ ๋’ค์ง‘๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•จ
ย  ย  ย  ย ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•œ ๋’ค ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋’ค์ง‘๊ธฐํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ


๐Ÿ”Ž ์„ ํƒ ์ •๋ ฌ

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

๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์•ž์œผ๋กœ ๋ณด๋‚ด๋Š” ๊ณผ์ •์„ 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)

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

array = [3, 5]
array[0], array[1] = array[1], array[0]

# ๊ฒฐ๊ณผ
# [5, 3]

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

N - 1๋ฒˆ ๋งŒํผ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์ฐพ์•„์„œ ๋งจ ์•ž์œผ๋กœ ๋ณด๋‚ด์•ผ ํ•˜๋ฉฐ ๋งค๋ฒˆ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๋น„๊ต ์—ฐ์‚ฐ์ด ํ•„์š”
โ‰ˆ N + (N - 1) + (N - 2) + ยทยทยท + 2 = N x (N + 1) / 2๋ฒˆ์˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๊ณ  ๊ฐ€์ •
์ฆ‰ (Nยฒ + N) / 2๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ณ  ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ O(Nยฒ)์ด๋ผ๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Œ

์„ ํƒ ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ = O(Nยฒ)

๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•ด ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ž„
๋‹ค๋งŒ, ํŠน์ •ํ•œ ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ์ผ์ด ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„  ์žฆ๊ธฐ ๋•Œ๋ฌธ์— ์„ ํƒ ์ •๋ ฌ ์†Œ์Šค์ฝ”๋“œ ํ˜•ํƒœ์— ์ต์ˆ™ํ•ด์ง€์ž


๐Ÿ”Ž ์‚ฝ์ž… ์ •๋ ฌ

ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ ˆํ•œ ์œ„์น˜์— '์‚ฝ์ž…'ํ•œ๋‹ค๋Š” ์˜๋ฏธ์˜ ์‚ฝ์ž… ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜๋ฉฐ, ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž…ํ•จ
ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ ์ ˆํ•œ ์œ„์น˜์— ๋“ค์–ด๊ฐ€๊ธฐ ์ด์ „์—, ๊ทธ ์•ž๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•จ

# ์‚ฝ์ž… ์ •๋ ฌ ์†Œ์Šค์ฝ”๋“œ
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)

์‚ฝ์ž… ์ •๋ ฌ ๋™์ž‘ ์˜ˆ์‹œ

[4] ย  [6] ย  [8] ย  [1] ย  [2] ย  [7] ย  [3] ย  [5]
1. ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ '4'์€ ๊ทธ ์ž์ฒด๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•จ
2. ๋‘ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ์ธ '6'์ด ์–ด๋–ค ์œ„์น˜๋กœ ๋“ค์–ด๊ฐˆ์ง€ ํŒ๋‹จํ•จ
ย  '4'์˜ ์™ผ์ชฝ ํ˜น์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๋‘ ๊ฒฝ์šฐ๋งŒ ์กด์žฌํ•จ
ย  => ์›๋ž˜ ์ž๋ฆฌ ๊ทธ๋Œ€๋กœ ๋‘  ('4'์˜ ์˜ค๋ฅธ์ชฝ์— ์‚ฝ์ž…)

[4] ย  [6] ย  [8] ย  [1] ย  [2] ย  [7] ย  [3] ย  [5]
'8'์ด ์–ด๋–ค ์œ„์น˜์— ๋“ค์–ด๊ฐˆ์ง€ ํŒ๋‹จํ•จ
ย  ์‚ฝ์ž…๋  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋Š” ์ด 3๊ฐ€์ง€ ('4'์˜ ์™ผ์ชฝ, '4'์™€ '6' ์‚ฌ์ด, '6'์˜ ์˜ค๋ฅธ์ชฝ)
ย  => '8'์€ '4'์™€ '6'๋ณด๋‹ค ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์›๋ž˜ ์ž๋ฆฌ ๊ทธ๋Œ€๋กœ ๋‘ 

[4] ย  [6] ย  [8] ย  [1] ย  [2] ย  [7] ย  [3] ย  [5]
'1'์ด ์–ด๋–ค ์œ„์น˜์— ๋“ค์–ด๊ฐˆ์ง€ ํŒ๋‹จํ•จ
ย  => '4', '6', '8'๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ ๋ฒˆ์งธ ์œ„์น˜์— ์‚ฝ์ž…

[1] ย  [4] ย  [6] ย  [8] ย  [2] ย  [7] ย  [3] ย  [5]
'2'๊ฐ€ ์–ด๋–ค ์œ„์น˜์— ๋“ค์–ด๊ฐˆ์ง€ ํŒ๋‹จํ•จ
ย  => '1'๊ณผ '4' ์‚ฌ์ด์— ์‚ฝ์ž…ํ•จ

[1] ย  [2] ย  [4] ย  [6] ย  [8] ย  [7] ย  [3] ย  [5]
'7'์ด ์–ด๋–ค ์œ„์น˜์— ๋“ค์–ด๊ฐˆ์ง€ ํŒ๋‹จํ•จ
ย  => '6'๊ณผ '8' ์‚ฌ์ด์— ์‚ฝ์ž…ํ•จ

[1] ย  [2] ย  [4] ย  [6] ย  [7] ย  [8] ย  [3] ย  [5]
'3'์ด ์–ด๋–ค ์œ„์น˜์— ๋“ค์–ด๊ฐˆ์ง€ ํŒ๋‹จํ•จ
ย  => '2'์™€ '4' ์‚ฌ์ด์— ์‚ฝ์ž…ํ•จ

[1] ย  [2] ย  [3] ย  [4] ย  [6] ย  [7] ย  [8] ย  [5]
'5'๊ฐ€ ์–ด๋–ค ์œ„์น˜์— ๋“ค์–ด๊ฐˆ์ง€ ํŒ๋‹จํ•จ
ย  => '4'์™€ '6' ์‚ฌ์ด์— ์‚ฝ์ž…ํ•จ

[1] ย  [2] ย  [3] ย  [4] ย  [5] ย  [6] ย  [7] ย  [8] ย 
์ด์™€ ๊ฐ™์ด ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž…ํ•˜๋Š” ๊ณผ์ •์„ N - 1๋ฒˆ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋˜๋ฉด ์ด์™€ ๊ฐ™์ด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ

์ •๋ ฌ์ด ์ด๋ฃจ์–ด์ง„ ์›์†Œ๋Š” ํ•ญ์ƒ ์˜ค๋ฆ„์ฐจ์ˆœ์„ ์œ ์ง€ํ•˜๊ณ  ์žˆ์Œ
(ํ•˜๋Š˜์ƒ‰์œผ๋กœ ์น ํ•ด์ง„ ์นด๋“œ๋“ค์€ ์–ด๋–ค ๋‹จ๊ณ„๋“ ์ง€ ํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ์ž„)
ย  => ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ์˜ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ ์ด๋ฏธ ์ •๋ ฌ์ด ๋œ ์ƒํƒœ์ด๋ฏ€๋กœ ์ž๊ธฐ๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋‚ฌ๋‹ค๋ฉด ๋” ์ด์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ดํŽด๋ณผ ํ•„์š” ์—†์ด ๊ทธ ์ž๋ฆฌ์— ์‚ฝ์ž…๋˜๋ฉด ๋˜๋Š” ๊ฒƒ!

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

์‚ฝ์ž… ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ = O(Nยฒ), ์„ ํƒ ์ •๋ ฌ๊ณผ ํก์‚ฌํ•œ ์‹œ๊ฐ„์ด ์†Œ์š”๋จ
But, ํ˜„์žฌ ๋ฆฌ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๋ผ๋ฉด ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•จ!

์ตœ์„ ์˜ ๊ฒฝ์šฐ O(N)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๋กœ ์ž…๋ ฅ์ด ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ œ๋ผ๋ฉด ์‚ฝ์ž… ์ •๋ ฌ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์ •๋‹ต ํ™•๋ฅ  ๋†’์ผ ์ˆ˜ ์žˆ์Œ


๐Ÿ”Ž ํ€ต ์ •๋ ฌ

๊ธฐ์ค€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ทธ ๊ธฐ์ค€๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ์™€ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•
์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ€ต ์ •๋ ฌ์€ ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ(Pivot)๋กœ ์„ค์ •ํ•จ

# ํŒŒ์ด์ฌ์˜ ์žฅ์ ์„ ์‚ด๋ฆฐ ํ€ต ์ •๋ ฌ ์†Œ์Šค์ฝ”๋“œ
array = [7, 5, 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))

ํ€ต ์ •๋ ฌ ๋™์ž‘ ์˜ˆ์‹œ

[4] ย  [6] ย  [8] ย  [1] ย  [2] ย  [7] ย  [3] ย  [5]
1. ํ˜„์žฌ ํ”ผ๋ฒ—์˜ ๊ฐ’์€ '4', ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ '4'๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒ = '6', ์˜ค๋ฅธ์ชฝ์—์„œ๋ถ€ํ„ฐ '4'๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒ = '3'
ย  => ๋‘ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ์„œ๋กœ ๋ณ€๊ฒฝ

[4] ย  [3] ย  [8] ย  [1] ย  [2] ย  [7] ย  [6] ย  [5]
2. ํ˜„์žฌ ํ”ผ๋ฒ—์˜ ๊ฐ’์€ '4', ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ '4'๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒ = '8', ์˜ค๋ฅธ์ชฝ์—์„œ๋ถ€ํ„ฐ '4'๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒ = '2'
ย  => ๋‘ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ์„œ๋กœ ๋ณ€๊ฒฝ

[4] ย  [3] ย  [2] ย  [1] ย  [8] ย  [7] ย  [6] ย  [5]
3. ํ˜„์žฌ ํ”ผ๋ฒ—์˜ ๊ฐ’์€ '4', ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ '4'๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒ = '8', ์˜ค๋ฅธ์ชฝ์—์„œ๋ถ€ํ„ฐ '4'๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒ = '1'
ย  => ๋‹จ, ์ด์ฒ˜๋Ÿผ ์œ„์น˜๊ฐ€ ์—‡๊ฐˆ๋ฆฌ๋Š” ๊ฒฝ์šฐ 'ํ”ผ๋ฒ—'๊ณผ '์ž‘์€ ๋ฐ์ดํ„ฐ'์˜ ์œ„์น˜๋ฅผ ์„œ๋กœ ๋ณ€๊ฒฝ

[1] ย  [3] ย  [2] ย  [4] ย  [8] ย  [7] ย  [6] ย  [5]
[๋ถ„ํ•  ์™„๋ฃŒ] '4'์˜ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋‘ 4๋ณด๋‹ค ์ž‘๊ณ , ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋‘ 4๋ณด๋‹ค ํผ
์ด์™€ ๊ฐ™์ด ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ฌถ์Œ์„ ๋‚˜๋ˆ„๋Š” ์ž‘์—…์„ ๋ถ„ํ• (Divide) ํ˜น์€ ํŒŒํ‹ฐ์…˜(Partition)์ด๋ผ ํ•จ

[1] ย  [3] ย  [2] ย  [ย  ] ย  [ย  ] ย  [ย  ] ย  [ย  ] ย  [ย  ] ย 
[์™ผ์ชฝ ๋ฐ์ดํ„ฐ ๋ฌถ์Œ ์ •๋ ฌ] ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ •๋ ฌ ์ˆ˜ํ–‰

[ย  ] ย  [ย  ] ย  [ย  ] ย  [ย  ] ย  [8] ย  [7] ย  [6] ย  [5]
[์˜ค๋ฅธ์ชฝ ๋ฐ์ดํ„ฐ ๋ฌถ์Œ ์ •๋ ฌ] ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ •๋ ฌ ์ˆ˜ํ–‰

์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด ์ „์ฒด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ ์ •๋ ฌ์ด ์ˆ˜ํ–‰๋จ
(๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋“ค์ด ๋” ์ด์ƒ ๋ถ„ํ• ์ด ๋ถˆ๊ฐ€๋Šฅํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•จ)

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

ํ€ต ์ •๋ ฌ์˜ ํ‰๊ท  ์‹œ๊ฐ„ ๋ณต์žก๋„ = O(NlogN)
ํ‰๊ท ์ ์œผ๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(NlogN)์ด์ง€๋งŒ ์ตœ์•…์˜ ๊ฒฝ์šฐ O(Nยฒ)

๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ์ž…๋ ฅ๋˜๋Š” ๊ฒฝ์šฐ ํ€ต ์ •๋ ฌ์€ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•  ํ™•๋ฅ ์ด ๋†’์Œ
์ด๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๋งค์šฐ ๋Š๋ฆฌ๊ฒŒ ๋™์ž‘ํ•จ

๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋ฉด ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(NlogN)์ด ๋˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•ด์ฃผ๊ธฐ์— ๊ฑฑ์ • X


๐Ÿ”Ž ๊ณ„์ˆ˜ ์ •๋ ฌ

๊ณ„์ˆ˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํŠน์ •ํ•œ ์กฐ๊ฑด์ด ๋ถ€ํ•ฉํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋งค์šฐ ๋น ๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
'๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋˜์–ด ์ •์ˆ˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๋•Œ'๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  1. ๊ฐ€์žฅ ํฐ ๋ฐ์ดํ„ฐ์™€ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„๊ฐ€ ๋ชจ๋‘ ๋‹ด๊ธธ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋‚˜์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•จ
  2. ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’๊ณผ ๋™์ผํ•œ ์ธ๋ฑ์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ด
    => ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ตœ์ข… ๋ฆฌ์ŠคํŠธ์—๋Š” ๊ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ช‡ ๋ฒˆ์”ฉ ๋“ฑ์žฅํ–ˆ๋Š”์ง€ ๊ทธ ํšŸ์ˆ˜๊ฐ€ ๊ธฐ๋ก๋จ
    ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ๋•Œ๋Š” ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ๊ทธ ๊ฐ’๋งŒํผ ๋ฐ˜๋ณตํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ ์ถœ๋ ฅ
# ๊ณ„์ˆ˜ ์ •๋ ฌ ์†Œ์Šค์ฝ”๋“œ

# ๋ชจ๋“  ์›์†Œ์˜ ๊ฐ’์ด 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=' ') # ๋„์–ด์“ฐ๊ธฐ๋ฅผ ๊ตฌ๋ถ„์œผ๋กœ ๋“ฑ์žฅํ•œ ํšŸ์ˆ˜๋งŒํผ ์ธ๋ฑ์Šค ์ถœ๋ ฅ

๊ณ„์ˆ˜ ์ •๋ ฌ ๋™์ž‘ ์˜ˆ์‹œ

[4] ย  [6] ย  [4] ย  [8] ย  [1] ย  [2] ย  [7] ย  [1]

12345678
00000000

์ดˆ๊ธฐ์ƒํƒœ, ๊ฐ€์žฅ ํฐ ๋ฐ์ดํ„ฐ๋Š” '8', ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋Š” '1'
๊ฐ€์žฅ ํฐ ๋ฐ์ดํ„ฐ์™€ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„๊ฐ€ ๋ชจ๋‘ ๋‹ด๊ธธ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋‚˜์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑ
๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ 0์ด ๋˜๋„๋ก ์ดˆ๊ธฐํ™”ํ•จ

๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’๊ณผ ๋™์ผํ•œ ์ธ๋ฑ์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ๋จ
[4] ย  [6] ย  [4] ย  [8] ย  [1] ย  [2] ย  [7] ย  [1]

12345678
00010000

[4] ย  [6] ย  [4] ย  [8] ย  [1] ย  [2] ย  [7] ย  [1]

12345678
00010100

[4] ย  [6] ย  [4] ย  [8] ย  [1] ย  [2] ย  [7] ย  [1]

12345678
00020100

...

[4] ย  [6] ย  [4] ย  [8] ย  [1] ย  [2] ย  [7] ย  [1]

12345678
21020111

๊ฒฐ๊ณผ์ ์œผ๋กœ ์œ„ ๋ฆฌ์ŠคํŠธ์—๋Š” ๊ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ช‡ ๋ฒˆ ๋“ฑ์žฅํ–ˆ๋Š”์ง€ ๊ทธ ํšŸ์ˆ˜๊ฐ€ ๊ธฐ๋ก๋จ
์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ง์ ‘ ๋ˆˆ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ๊ทธ ๊ฐ’๋งŒํผ ์ธ๋ฑ์Šค๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋จ
ex) ์ถœ๋ ฅ ๊ฒฐ๊ณผ: 1 1 2 4 4 6 7 8

๊ณ„์ˆ˜ ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

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

๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ๋“ฑ์žฅํ•  ๋•Œ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ


๐Ÿ“ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋น„๊ต

์ฐธ๊ณ ) ํ‘œ์ค€ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ O(NlogN)์„ ๋ณด์žฅํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ์Œ

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

๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ sorted() ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•จ
ํ€ต ์ •๋ ฌ๊ณผ ๋™์ž‘ ๋ฐฉ์‹์ด ๋น„์Šทํ•œ ๋ณ‘ํ•ฉ ์ •๋ ฌ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•จ, ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(NlogN)์„ ๋ณด์žฅํ•จ

๋ฆฌ์ŠคํŠธ ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์žˆ์„ ๋•Œ ๋‚ด๋ถ€ ์›์†Œ๋ฅผ ๋ฐ”๋กœ ์ •๋ ฌํ•  ์ˆ˜๋„ ์žˆ์Œ
๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด์˜ ๋‚ด์žฅ ํ•จ์ˆ˜์ธ sort()๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ

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

์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

  • ๋ฌธ์ œ์—์„œ ๋ณ„๋„์˜ ์š”๊ตฌ๊ฐ€ ์—†๋‹ค๋ฉด ๋‹จ์ˆœํžˆ ์ •๋ ฌํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” ๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉ
  • ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„๊ฐ€ ํ•œ์ •๋˜์–ด ์žˆ์œผ๋ฉฐ ๋” ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•ด์•ผ ํ•  ๋•Œ๋Š” ๊ณ„์ˆ˜ ์ •๋ ฌ ์‚ฌ์šฉ

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ, ์ผ๋ฐ˜์ ์œผ๋กœ 3๊ฐ€์ง€ ๋ฌธ์ œ ์œ ํ˜•์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Œ
ย  1. ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ: ๋‹จ์ˆœํžˆ ์ •๋ ฌ ๊ธฐ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋Š”์ง€ ๋ฌผ์–ด๋ณด๋Š” ๋ฌธ์ œ๋กœ ๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์ˆ™์ง€ํ•˜๊ณ  ์žˆ์œผ๋ฉด ์–ด๋ ต์ง€ ์•Š๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์Œ
ย  2. ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์›๋ฆฌ์— ๋Œ€ํ•ด์„œ ๋ฌผ์–ด๋ณด๋Š” ๋ฌธ์ œ: ์„ ํƒ ์ •๋ ฌ, ์‚ฝ์ž… ์ •๋ ฌ, ํ€ต ์ •๋ ฌ ๋“ฑ์˜ ์›๋ฆฌ๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ์Œ
ย  3. ๋” ๋น ๋ฅธ ์ •๋ ฌ์ด ํ•„์š”ํ•œ ๋ฌธ์ œ: ํ€ต ์ •๋ ฌ ๊ธฐ๋ฐ˜์˜ ์ •๋ ฌ ๊ธฐ๋ฒ•์œผ๋กœ๋Š” ํ’€ ์ˆ˜ ์—†์œผ๋ฉฐ ๊ณ„์ˆ˜ ์ •๋ ฌ ๋“ฑ์˜ ๋‹ค๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ๋ฌธ์ œ์—์„œ ๊ธฐ์กด์— ์•Œ๋ ค์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ตฌ์กฐ์ ์ธ ๊ฐœ์„ ์„ ๊ฑฐ์ณ์•ผ ํ’€ ์ˆ˜ ์žˆ์Œ


โœ๏ธ ์‹ค์ „ ๋ฌธ์ œ

๐Ÿ“ ์œ„์—์„œ ์•„๋ž˜๋กœ

ํ•˜๋‚˜์˜ ์ˆ˜์—ด์—๋Š” ๋‹ค์–‘ํ•œ ์ˆ˜๊ฐ€ ์กด์žฌํ•จ, ์ด๋Ÿฌํ•œ ์ˆ˜๋Š” ํฌ๊ธฐ์— ์ƒ๊ด€์—†์ด ๋‚˜์—ด๋˜์–ด ์žˆ์Œ
์ด ์ˆ˜๋ฅผ ํฐ ์ˆ˜๋ถ€ํ„ฐ ์ž‘์€ ์ˆ˜์˜ ์ˆœ์„œ๋กœ ์ •๋ ฌํ•ด์•ผ ํ•จ

์ˆ˜์—ด์„ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ์‹œ์˜ค

  • ์ž…๋ ฅ ์กฐ๊ฑด
    - ์ฒซ์งธ ์ค„์— ์ˆ˜์—ด์— ์†ํ•ด ์žˆ๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง (1 โ‰ค N โ‰ค 500)
    - ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N + 1๋ฒˆ์งธ ์ค„๊นŒ์ง€ N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ž…๋ ฅ๋จ, ์ˆ˜์˜ ๋ฒ”์œ„๋Š” 1 ์ด์ƒ 100,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
  • ์ถœ๋ ฅ ์กฐ๊ฑด
    - ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ˆ˜์—ด์ด ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ถœ๋ ฅํ•จ, ๋™์ผํ•œ ์ˆ˜์˜ ์ˆœ์„œ๋Š” ์ž์œ ๋กญ๊ฒŒ ์ถœ๋ ฅํ•ด๋„ ๊ดœ์ฐฎ์Œ

๋ฌธ์ œ ํ•ด์„ค

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ •๋ ฌ์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฌผ์–ด๋ณด๋Š” ๋ฌธ์ œ
์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ 500๊ฐœ ์ดํ•˜๋กœ ๋งค์šฐ ์ ์œผ๋ฉฐ, ๋ชจ๋“  ์ˆ˜๋Š” 1 ์ด์ƒ 100,000 ์ดํ•˜์ด๋ฏ€๋กœ ์–ด๋– ํ•œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ

๊ฐ€์žฅ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง€๋Š” ํŒŒ์ด์ฌ์˜ ๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ 

์†Œ์Šค์ฝ”๋“œ


๐Ÿ“ ์„ฑ์ ์ด ๋‚ฎ์€ ์ˆœ์„œ๋กœ ํ•™์ƒ ์ถœ๋ ฅํ•˜๊ธฐ

N๋ช…์˜ ํ•™์ƒ ์ •๋ณด๊ฐ€ ์žˆ์Œ, ํ•™์ƒ ์ •๋ณด๋Š” ํ•™์ƒ์˜ ์ด๋ฆ„๊ณผ ํ•™์ƒ์˜ ์„ฑ์ ์œผ๋กœ ๊ตฌ๋ถ„๋จ

๊ฐ ํ•™์ƒ์˜ ์ด๋ฆ„๊ณผ ์„ฑ์  ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์„ฑ์ ์ด ๋‚ฎ์€ ์ˆœ์„œ๋Œ€๋กœ ํ•™์ƒ์˜ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค

  • ์ž…๋ ฅ ์กฐ๊ฑด
    - ์ฒซ ๋ฒˆ์งธ ์ค„์— ํ•™์ƒ์˜ ์ˆ˜ N์ด ์ž…๋ ฅ๋จ (1 โ‰ค N โ‰ค 100,000)
    - ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N + 1๋ฒˆ์งธ ์ค„์—๋Š” ํ•™์ƒ์˜ ์ด๋ฆ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด A์™€ ํ•™์ƒ์˜ ์„ฑ์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ B๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ž…๋ ฅ๋จ, ๋ฌธ์ž์—ด A์˜ ๊ธธ์ด์™€ ํ•™์ƒ์˜ ์„ฑ์ ์€ 100 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
  • ์ถœ๋ ฅ ์กฐ๊ฑด
    - ๋ชจ๋“  ํ•™์ƒ์˜ ์ด๋ฆ„์„ ์„ฑ์ ์ด ๋‚ฎ์€ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•จ, ์„ฑ์ ์ด ๋™์ผํ•œ ํ•™์ƒ๋“ค์˜ ์ˆœ์„œ๋Š” ์ž์œ ๋กญ๊ฒŒ ์ถœ๋ ฅํ•ด๋„ ๊ดœ์ฐฎ์Œ

๋ฌธ์ œ ํ•ด์„ค

ํ•™์ƒ์˜ ์ •๋ณด๊ฐ€ ์ตœ๋Œ€ 100,000๊ฐœ๊นŒ์ง€ ์ž…๋ ฅ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ตœ์•…์˜ ๊ฒฝ์šฐ O(NlogN)์„ ๋ณด์žฅํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜๊ฑฐ๋‚˜ O(N)์„ ๋ณด์žฅํ•˜๋Š” ๊ณ„์ˆ˜ ์ •๋ ฌ์„ ์ด์šฉํ•˜๋ฉด ๋จ

์ž…๋ ฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ํ•™์ƒ์˜ ์ด๋ฆ„๊ณผ ์ ์ˆ˜์ง€๋งŒ, ์ถœ๋ ฅํ•  ๋•Œ๋Š” ํ•™์ƒ์˜ ์ด๋ฆ„๋งŒ ์ถœ๋ ฅํ•˜๋ฉด ๋˜๋ฏ€๋กœ ํ•™์ƒ ์ •๋ณด๋ฅผ (์ ์ˆ˜, ์ด๋ฆ„)์œผ๋กœ ๋ฌถ์€ ๋’ค ์ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•จ

๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํŒŒ์ด์ฌ์˜ ๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ 

์†Œ์Šค์ฝ”๋“œ


๐Ÿ“ ๋‘ ๋ฐฐ์—ด์˜ ์›์†Œ ๊ต์ฒด

์ˆ˜๋นˆ์ด๋Š” ๋‘ ๊ฐœ์˜ ๋ฐฐ์—ด A์™€ B๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
๋‘ ๋ฐฐ์—ด์€ N๊ฐœ์˜ ์›์†Œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ฐฐ์—ด์˜ ์›์†Œ๋Š” ๋ชจ๋‘ ์ž์—ฐ์ˆ˜์ž„
์ˆ˜๋นˆ์ด๋Š” ์ตœ๋Œ€ K๋ฒˆ์˜ ๋ฐ”๊ฟ”์น˜๊ธฐ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ฐ”๊ฟ”์น˜๊ธฐ ์—ฐ์‚ฐ์ด๋ž€ ๋ฐฐ์—ด A์— ์žˆ๋Š” ์›์†Œ ํ•˜๋‚˜์™€ ๋ฐฐ์—ด B์— ์žˆ๋Š” ์›์†Œ ํ•˜๋‚˜๋ฅผ ๊ณจ๋ผ ๋‘ ์›์†Œ๋ฅผ ์„œ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ๋งํ•จ
์ˆ˜๋นˆ์ด์˜ ์ตœ์ข… ๋ชฉํ‘œ๋Š” ๋ฐฐ์—ด A์˜ ๋ชจ๋“  ์›์†Œ์˜ ํ•ฉ์ด ์ตœ๋Œ€๊ฐ€ ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ์šฐ๋ฆฌ๋Š” ์ˆ˜๋นˆ์ด๋ฅผ ๋„์™€์•ผ ํ•จ

N, K, ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด A์™€ B์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ตœ๋Œ€ K๋ฒˆ์˜ ๋ฐ”๊ฟ”์น˜๊ธฐ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด A์˜ ๋ชจ๋“  ์›์†Œ์˜ ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค

  • ์ž…๋ ฅ ์กฐ๊ฑด
    - ์ฒซ ๋ฒˆ์งธ ์ค„์— N, K๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ž…๋ ฅ๋จ (1 โ‰ค N โ‰ค 100,000, 0 โ‰ค K โ‰ค N)
    - ๋‘ ๋ฒˆ์งธ ์ค„์— ๋ฐฐ์—ด A์˜ ์›์†Œ๋“ค์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ž…๋ ฅ๋จ, ๋ชจ๋“  ์›์†Œ๋Š” 10,000,000๋ณด๋‹ค ์ž‘์€ ์ž์—ฐ์ˆ˜
    - ์„ธ ๋ฒˆ์งธ ์ค„์— ๋ฐฐ์—ด B์˜ ์›์†Œ๋“ค์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ž…๋ ฅ๋จ, ๋ชจ๋“  ์›์†Œ๋Š” 10,000,000๋ณด๋‹ค ์ž‘์€ ์ž์—ฐ์ˆ˜
  • ์ถœ๋ ฅ ์กฐ๊ฑด
    - ์ตœ๋Œ€ K๋ฒˆ์˜ ๋ฐ”๊ฟ”์น˜๊ธฐ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด A์˜ ๋ชจ๋“  ์›์†Œ์˜ ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•จ

๋ฌธ์ œ ํ•ด์„ค

๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ์•„์ด๋””์–ด๋Š” ๋งค๋ฒˆ ๋ฐฐ์—ด A์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ๋ฅผ ๊ณจ๋ผ, ๋ฐฐ์—ด B์—์„œ ๊ฐ€์žฅ ํฐ ์›์†Œ์™€ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ
๋‹จ, ๋ฐฐ์—ด A์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ๊ฐ€ ๋ฐฐ์—ด B์—์„œ ๊ฐ€์žฅ ํฐ ์›์†Œ๋ณด๋‹ค ์ž‘์„ ๋•Œ์—๋งŒ ๊ต์ฒด๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•จ
์ด๋Ÿฌํ•œ ๊ณผ์ •์„ K๋ฒˆ ๋ฐ˜๋ณตํ•˜๋ฉด ์›ํ•˜๋Š” ์ •๋‹ต์„ ์–ป์„ ์ˆ˜ ์žˆ์Œ

๋ฐฐ์—ด A์˜ ์›์†Œ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ, ๋ฐฐ์—ด B์˜ ์›์†Œ๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•จ
๋‘ ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๋น„๊ตํ•˜๋ฉฐ A์˜ ์›์†Œ๊ฐ€ B์˜ ์›์†Œ๋ณด๋‹ค ์ž‘์„ ๋•Œ์—๋งŒ ๊ต์ฒด๋ฅผ ์ˆ˜ํ–‰ํ•จ

๋‘ ๋ฐฐ์—ด์˜ ์›์†Œ๊ฐ€ ์ตœ๋Œ€ 100,000๊ฐœ๊นŒ์ง€ ์ž…๋ ฅ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ O(NlogN)์„ ๋ณด์žฅํ•˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์šฉ

์†Œ์Šค์ฝ”๋“œ


๐Ÿ“’ ์ด๊ฒƒ์ด ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค ๊ต์žฌ๋ฅผ ํ†ตํ•ด ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€