๐Ÿ’ก์ •๋ ฌ์ด๋ž€?

์ •๋ ฌ์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ •ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ด ํ•˜๋Š”๊ฒƒ ์ด๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณธ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ์ •๋ ฌ์— ๋Œ€ํ•ด ์ˆ˜๋„ ์—†์ด ๋งŽ์ด ๋“ค์–ด๋ดค์„ํ…๋ฐ, ์˜ค๋Š˜์€ ์ด ์ •๋ ฌ์— ๋Œ€ํ•ด์„œ ์งš๊ณ  ๋„˜์–ด๊ฐ€ ๋ณด์ž. ์ƒํ™ฉ์— ์ ์ ˆํ•˜์ง€ ๋ชปํ•œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•„์š” ์ด์ƒ์œผ๋กœ ์‹œ๊ฐ„์„ ๋งŽ์ด ์†Œ์š”ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๊ฒƒ ๋•Œ๋ฌธ์— ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต๋ถ€ํ•˜๋Š” ์ด์œ ์ด๊ธฐ๋„ ํ•˜๋‹ค. ๋‹ค์Œ์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ์„ค๋ช…์ด๋‹ค. ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์€ ๊ธฐ๋ณธ์œผ๋กœ ํŒŒ์ด์ฌ์—์„œ ์ œ๊ณต๋˜๋Š” ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ฆฌ๋ฅผ ํ•œ ํ›„, ๋ฌธ์ž์—ด์„ ๋’ค์ง‘๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋’ค์ง‘๋Š” ์—ฐ์‚ฐ์€ O(N)์ด๊ธฐ ๋•Œ๋ฌธ์—, ์—ฌ๊ธฐ์„œ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋งŒ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

๐Ÿ“Œ ์„ ํƒ ์ •๋ ฌ(Selection Sort)

์ปดํ“จํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ• ๋•Œ ์–ด๋–ป๊ฒŒ ํ• ์ง€ ์ƒ๊ฐํ•ด๋ณด์ž. ์ด ๋ฐ์ดํ„ฐ ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ๋งจ ์•ž์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๊ณ , ๊ทธ ๋‹ค์Œ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ์•ž์—์„œ ๋‘๋ฒˆ์งธ ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด ์–ด๋–จ๊นŒ? ์ด ๋ฐฉ๋ฒ•์€ ๊ฐ€์žฅ ์›์‹œ์ ์ธ ์ •๋ ฌ ๋ฐฉ๋ฒ•์œผ๋กœ, ์„ ํƒ ์ •๋ ฌ(selection sort)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ๋ณด์ž.

 

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” ์ •๋ ฌํ•  ๋ฐ์ดํ„ฐ์˜ ๊ฐฏ์ˆ˜๋ฅผ N์œผ๋กœ ์นญํ•œ๋‹ค. ๋‹ค์Œ ์˜ˆ์ œ์—์„œ๋Š” N = 10์ธ ๊ฒฝ์šฐ๋ฅผ ๊ฐ€์ •ํ•œ๋‹ค. ๋˜ํ•œ, ๋‹ค์Œ ๊ทธ๋ฆผ์—์„œ ํšŒ์ƒ‰ ์นด๋“œ๋Š” 'ํ˜„์žฌ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ์ค‘ ์ตœ์†Ÿ๊ฐ’'์„ ์˜๋ฏธํ•˜๋ฉฐ, ํ•˜๋Š˜์ƒ‰ ์นด๋“œ๋Š” '์ด๋ฏธ ์ •๋ ฌ๋œ' ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

๋‹ค์Œ์€ ํŒŒ์ด์ฌ์œผ๋กœ ๊ตฌํ˜„ํ•œ ์„ ํƒ์ •๋ ฌ ์ฝ”๋“œ์ด๋‹ค.

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)

 

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

# 0 ์ธ๋ฑ์Šค์™€ 1 ์ธ๋ฑ์Šค์˜ ์›์†Œ ๊ต์ฒดํ•˜๊ธฐ
array = [3, 5]
array[0], array[1] = array[1], array[0]

print(array)

 

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

๊ทธ๋ ‡๋‹ค๋ฉด, ์„ ํƒ ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์–ด๋–จ๊นŒ? ์‚ฌ์‹ค ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ๋งจ ์•ž์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๊ณ , ๊ทธ ๋‹ค์Œ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ์•ž์—์„œ ๋‘๋ฒˆ์งธ ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด ์–ด๋–จ๊นŒ? ์—ฌ๊ธฐ์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต๋ถ€ ํ•ด ๋ณธ์‚ฌ๋žŒ์ด๋ผ๋ฉด ๋ˆˆ์น˜๋ฅผ ์ฑŒ ์ˆ˜ ์žˆ๋“ฏ, ๋„ˆ๋ฌด ์—ฐ์‚ฐ์˜ ํšŸ์ˆ˜๊ฐ€ ๋งŽ๋‹ค. ์ด์œ ๋Š” ๋งค ๋ฐ˜๋ณต๋ฌธ๋งˆ๋‹ค ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฐจ๋ก€๋กœ ๊ฒ€์‚ฌํ•˜๋ฉฐ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ฐพ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์„ ํƒ ์ •๋ ฌ์€ N -1 ๋ฒˆ๋งŒํผ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์ฐพ์•„์„œ ๋งจ ์•ž์œผ๋กœ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ ๋งค๋ฒˆ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ ๋น„๊ต ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜๋‹ค. ์„ ํƒ ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N^2)๋กœ, ํšจ์œจ์ด ์ข‹์ง€ ์•Š์€ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜์ž๋ฉด, ์†Œ์Šค์ฝ”๋“œ์ƒ์˜ for๋ฐ˜๋ณต๋ฌธ์ด 2์ค‘์œผ๋กœ ๊ฒน์ณ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋งŒ์•ฝ, ์ •๋ ฌํ•ด์•ผ ํ•  ๋ฐ์ดํ„ฐ์˜ ๊ฐฏ์ˆ˜๊ฐ€ 100๋ฐฐ๋กœ ๋Š˜์–ด๋‚˜๋ฉด, ์ด๋ก ์ ์œผ๋กœ ์ˆ˜ํ–‰์‹œ๊ฐ„์€ 10,000๋ฐฐ๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, ์ด๋Ÿฌํ•œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋Š” ์„ ํƒ ์ •๋ ฌ์ด ์–ผ๋งˆ๋‚˜ ํšจ์œจ์ ์ผ๊นŒ?

 

์œ„์˜ ํ‘œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ, ์„ ํƒ ์ •๋ ฌ์€ ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•„๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ฐพ๋Š” ์ผ์ด ์žฆ์œผ๋ฏ€๋กœ ํ•ญ์ƒ ๊ธฐ์–ตํ•ด๋‘์ž.

 

๐Ÿ“Œ ์‚ฝ์ž… ์ •๋ ฌ(Selection Sort)

๋น„ํšจ์œจ์ ์ธ ์„ ํƒ ์ •๋ ฌ ๋Œ€์‹  ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์—†์„๊นŒ? "๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜๋ฉฐ, ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž…ํ•˜๋ฉด ์–ด๋–จ๊นŒ?" ์‚ฝ์ž… ์ •๋ ฌ์€ ์„ ํƒ ์ •๋ ฌ์— ๋น„ํ•ด ๊ตฌํ˜„ ๋‚œ์ด๋„๊ฐ€ ๋†’์€ ํŽธ์ด์ง€๋งŒ ์„ ํƒ ์ •๋ ฌ์— ๋น„ํ•ด ์‹คํ–‰ ์‹œ๊ฐ„ ์ธก๋ฉด์—์„œ ๋” ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ž˜ ์•Œ๋ ค์ ธ ์žˆ๋‹ค. ํŠนํžˆ ์‚ฝ์ž… ์ •๋ ฌ์€ ํ•„์š”ํ•  ๋•Œ๋งŒ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋ฏ€๋กœ '๋ฐ์ดํ„ฐ๊ฐ€ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ์„๋•Œ' ํšจ์œจ์ ์ด๋‹ค. ์„ ํƒ ์ •๋ ฌ์€ ํ˜„์žฌ ๋ฐ์ดํ„ฐ์˜ ์ƒํƒœ์™€ ์ƒ๊ด€์—†์ด ๋ฌด์กฐ๊ฑด ๋ชจ๋“  ์›์†Œ๋ฅผ ๋น„๊ตํ•˜๊ณ  ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” ๋ฐ˜๋ฉด, ์‚ฝ์ž… ์ •๋ ฌ์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.

 

์‚ฝ์ž… ์ •๋ ฌ์€ ํŠน์ •ํ•œ ์œ„์น˜์— ๋ฐ์ดํ„ฐ๋ฅผ '์‚ฝ์ž…'ํ•œ๋‹ค๋Š” ์˜๋ฏธ์—์„œ ์‚ฝ์ž… ์ •๋ ฌ ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๋”๋ถˆ์–ด ์‚ฝ์ž… ์ •๋ ฌ์€ ํŠน์ • ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฝ์ž…๋˜๊ธฐ ์ „์— ๊ทธ ์•ž๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ ์ •๋ ฌ ๋˜์–ด์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ • ํ•ด๋ณด์ž. ์‚ฝ์ž… ์ •๋ ฌ์€ ๋‘๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ฒซ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋Š” ๊ทธ ์ž์ฒด๋กœ ์ •๋ ฌ ๋˜์–ด ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

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)

 

์—ฌ๊ธฐ์„œ range์— ๋Œ€ํ•ด ์ž ๊น ์งš๊ณ  ๋„˜์–ด๊ฐˆ ๋ถ€๋ถ„์ด ์žˆ๋Š”๋ฐ,

๋”๋ณด๊ธฐ

ํŒŒ์ด์ฌ์˜ `range`๋Š” 3๊ฐœ์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜(`start`, `end`, `step`)๋ฅผ ๋ฐ›๋Š”๋‹ค. ์„ธ ๋ฒˆ์งธ ๋งค๊ฐœ ๋ณ€์ˆ˜์ธ `step`์€ ์ˆซ์ž ๊ฐ„์˜ ๊ฐ„๊ฒฉ์„ ์ง€์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ด `step` ๊ฐ’์ด ์–‘์ˆ˜์ผ ๊ฒฝ์šฐ `start` ์ธ๋ฑ์Šค๋ถ€ํ„ฐ `end-1` ์ธ๋ฑ์Šค๊นŒ์ง€ `step`๋งŒํผ ์ฆ๊ฐ€ํ•˜๋ฉฐ ์ˆœํšŒํ•œ๋‹ค. ๋ฐ˜๋ฉด, `step` ๊ฐ’์ด -1์ผ ๊ฒฝ์šฐ `start` ์ธ๋ฑ์Šค๋ถ€ํ„ฐ `end+1` ์ธ๋ฑ์Šค๊นŒ์ง€ 1์”ฉ ๊ฐ์†Œํ•œ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ฆฌ์ŠคํŠธ๋ฅผ ์—ญ์ˆœ์œผ๋กœ ์ˆœํšŒํ•˜๊ฑฐ๋‚˜ ํŠน์ • ๋ฒ”์œ„์—์„œ ๊ฐ์†Œํ•˜๋Š” ์ˆœ์„œ๋กœ ๊ฐ’์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, `range(5, 0, -1)`์€ 5๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ 1์”ฉ ๊ฐ์†Œํ•˜๋ฉด์„œ 1๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

for i in range(5, 0, -1):
    print(i, end=' ')  # ์ถœ๋ ฅ: 5 4 3 2 1


์ด ์ฝ”๋“œ๋Š” `start`๊ฐ€ 5, `end`๊ฐ€ 0, `step`์ด -1์ด๋ฏ€๋กœ, 5์—์„œ 1์”ฉ ๊ฐ์†Œํ•˜๋ฉฐ 1๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์ด์™€ ๊ฐ™์ด `range` ํ•จ์ˆ˜์˜ `step` ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ์ˆœํšŒ ํŒจํ„ด์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

 

๋‹ค์Œ์—๋Š” ํ€ต ์ •๋ ฌ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.

+ Recent posts