๐Ÿค–/์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ฆฌ

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Sorting Algorithm)

sssbin 2022. 2. 4. 18:03

 

์ •๋ ฌ

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

 

 

์„ ํƒ ์ •๋ ฌ

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

 -> ๋งค๋ฒˆ '๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ์„ ์„ ํƒ'

- ์‹œ๊ฐ„๋ณต์žก๋„ O(N^2)

     ใ„ด ์—ฐ์‚ฐํšŸ์ˆ˜: N + (N-1) + (N-2) + ··· 2 → N*(N+1)/2 → O(N^2)

     ใ„ด ์†Œ์Šค์ฝ”๋“œ: 2์ค‘ ๋ฐ˜๋ณต๋ฌธ ์‚ฌ์šฉ

# ์„ ํƒ ์ •๋ ฌ

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]    # swap

print(array)

 

 

์‚ฝ์ž… ์ •๋ ฌ

- ์„ ํƒ ์ •๋ ฌ์€ ํ˜„์žฌ ๋ฐ์ดํ„ฐ์˜ ์ƒํƒœ์™€ ์ƒ๊ด€์—†์ด ๋ฌด์กฐ๊ฑด ๋ชจ๋“  ์›์†Œ๋ฅผ ๋น„๊ตํ•˜๊ณ  ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฉด ์‚ฝ์ž… ์ •๋ ฌ์€ ํ•„์š”ํ•  ๋•Œ๋งŒ ์œ„์น˜๋ฅผ ๋ฐ”๊พผ๋‹ค.

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

   ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋ฆฌ์ŠคํŠธ์—์„œ ์ ์ ˆํ•œ ์œ„์น˜๋ฅผ ์ฐพ์€ ๋’ค์—, ๊ทธ ์œ„์น˜์— ์‚ฝ์ž…๋œ๋‹ค.

- ์‹œ๊ฐ„ ๋ณต์žก๋„ O(N^2)

    ใ„ด ํ˜„์žฌ ๋ฆฌ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๋ผ๋ฉด ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ 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)

 

 

ํ€ต ์ •๋ ฌ

- ๊ธฐ์ค€์„ ์„ค์ •ํ•œ ๋‹ค์Œ ํฐ ์ˆ˜์™€ ์ž‘์€ ์ˆ˜๋ฅผ ๊ตํ™˜ํ•œ ํ›„ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘

- ํ”ผ๋ฒ—(๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ค€) ์„ค์ •

    → ์™ผ์ชฝ๋ถ€ํ„ฐ ํ”ผ๋ฒ—๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ณ , ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š”๋‹ค.

    → ํฐ ๋ฐ์ดํ„ฐ์™€ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ์„œ๋กœ ๊ตํ™˜ํ•ด์ค€๋‹ค.

    → ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด 'ํ”ผ๋ฒ—'์— ๋Œ€ํ•˜์—ฌ ์ •๋ ฌ์ด ์ˆ˜ํ–‰๋œ๋‹ค.

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

    ใ„ด ํ”ผ๋ฒ—์„ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ€์žฅ ์™ผ์ชฝ ๋ฐ์ดํ„ฐ๋กœ ์‚ผ์„ ๋•Œ

        '์ด๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ'์—๋Š” O(N^2)

- ํŠน์ •ํ•œ ๋ฆฌ์ŠคํŠธ์—์„œ ํ”ผ๋ฒ—์„ ์„ค์ •ํ•˜์—ฌ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•œ ์ดํ›„์—,

   ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ์™€ ์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ๊ฐ ๋‹ค์‹œ ์ •๋ ฌ์„ ์ˆ˜ํ–‰

- '์žฌ๊ท€ ํ•จ์ˆ˜'์™€ ๋™์ž‘ ์›๋ฆฌ๊ฐ€ ๊ฐ™๋‹ค.

    ใ„ด ์ข…๋ฃŒ ์กฐ๊ฑด: ํ˜„์žฌ ๋ฆฌ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ 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)
# ํŒŒ์ด์ฌ์˜ ์žฅ์ ์„ ์‚ด๋ฆฐ ํ€ต ์ •๋ ฌ

# ํ”ผ๋ฒ—๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•˜๋Š” ๋น„๊ต ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ฉด์—์„œ๋Š” ์กฐ๊ธˆ ๋น„ํšจ์œจ์ ์ด๋‹ค.
# ํ•˜์ง€๋งŒ ๋” ์ง๊ด€์ ์ด๊ณ  ๊ธฐ์–ตํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

array = [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(N+K)

    ใ„ด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์–‘์˜ ์ •์ˆ˜์ธ ์ƒํ™ฉ์—์„œ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ N, ๋ฐ์ดํ„ฐ ์ค‘ ์ตœ๋Œ“๊ฐ’์ด K์ผ ๋•Œ

- ๊ณต๊ฐ„ ๋ณต์žก๋„ O(N+K)

    ใ„ด ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ํ•œ์ •๋˜์–ด ์žˆ๊ณ , ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ๋งŽ์ด ์ค‘๋ณต๋˜์–ด ์žˆ์„์ˆ˜๋ก ์œ ๋ฆฌ

# ๊ณ„์ˆ˜ ์ •๋ ฌ

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

 

 

์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

(1) sorted()

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

    - ์ผ๋ฐ˜์ ์œผ๋กœ ํ€ต ์ •๋ ฌ๋ณด๋‹ค ๋А๋ฆฌ์ง€๋งŒ ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ O(NlogN) ๋ณด์žฅ

    - ๋ฆฌ์ŠคํŠธ, ๋”•์…”๋„ˆ๋ฆฌ ์ž๋ฃŒํ˜• ๋“ฑ์„ ์ž…๋ ฅ๋ฐ›์•„์„œ ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ ์ถœ๋ ฅ

    - ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒฐ๊ณผ๋Š” ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•

(2) sort()

    - ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด์˜ ๋‚ด์žฅ ํ•จ์ˆ˜

    - ๋ฆฌ์ŠคํŠธ ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์žˆ์„ ๋•Œ ๋‚ด๋ถ€ ์›์†Œ๋ฅผ ๋ฐ”๋กœ ์ •๋ ฌ

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

# ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

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

result = sorted(array)  # sorted()
print(result)
print(array)

array.sort()            # sort()
print(array)

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

- key ๊ฐ’์œผ๋กœ๋Š” ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ€์•ผ ํ•˜๋ฉฐ ์ด๋Š” ์ •๋ ฌ ๊ธฐ์ค€์ด ๋œ๋‹ค.

- ํ˜น์€ ๋žŒ๋‹ค(lambda) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

# ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ key๋ฅผ ํ™œ์šฉ

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

def setting(data):
    return data[1]

result = sorted(array, key=setting)
print(result)

 

 

์‹ค์ „ ๋ฌธ์ œ1. ์œ„์—์„œ ์•„๋ž˜๋กœ

# ์ •๋ ฌ
# ์‹ค์ „ ๋ฌธ์ œ1. ์œ„์—์„œ ์•„๋ž˜๋กœ

n = int(input())
num = []
for i in range(n):
    num.append(int(input()))

num.sort(reverse=1)
for i in num:
    print(i, end=' ')

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

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

 

 

์‹ค์ „ ๋ฌธ์ œ2. ์„ฑ์ ์ด ๋‚ฎ์€ ์ˆœ์„œ๋กœ ํ•™์ƒ ์ถœ๋ ฅํ•˜๊ธฐ

- ๋‚ด ์ฝ”๋“œ: key๋ฅผ ์ด์šฉํ•˜์—ฌ ์ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•  ๋•Œ grade ํ•จ์ˆ˜ ๋งŒ๋“ฆ.

# ์ •๋ ฌ
# ์‹ค์ „ ๋ฌธ์ œ2. ์„ฑ์ ์ด ๋‚ฎ์€ ์ˆœ์„œ๋กœ ํ•™์ƒ ์ถœ๋ ฅํ•˜๊ธฐ

n = int(input())
info = []
for i in range(n):
    a, b = input().split()
    info.append((a, int(b)))

def grade(info):
    return info[1]

info.sort(key=grade)
for i in info:
    print(i[0], end=' ')

- ๊ต์žฌ ์ฝ”๋“œ: ํ•™์ƒ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ ๋ฆฌ์ŠคํŠธ ์‚ฌ์šฉํ•ด์„œ ์ธ๋ฑ์‹ฑํ•จ.

                   key๋ฅผ ์ด์šฉํ•˜์—ฌ ์ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•  ๋•Œ lambda ํ•จ์ˆ˜ ์ด์šฉ

# ์ •๋ ฌ
# ์‹ค์ „ ๋ฌธ์ œ2. ์„ฑ์ ์ด ๋‚ฎ์€ ์ˆœ์„œ๋กœ ํ•™์ƒ ์ถœ๋ ฅํ•˜๊ธฐ
# ๊ต์žฌ ์ฝ”๋“œ

n = int(input())
array = []
for i in range(n):
    input_data = input().split()
    array.append((input_data[0], int(input_data[1])))
    
array = sorted(array, key=lambda student:student[1])
for student in array:
    print(student[0], end=' ')

 

 

์‹ค์ „ ๋ฌธ์ œ3. ๋‘ ๋ฐฐ์—ด์˜ ์›์†Œ ๊ต์ฒด

# ์ •๋ ฌ
# ์‹ค์ „ ๋ฌธ์ œ3. ๋‘ ๋ฐฐ์—ด์˜ ์›์†Œ ๊ต์ฒด

n, k = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))

a.sort()
b.sort(reverse=1)

for i in range(k):
    if a[i] < b[i]:
        a[i], b[i] = b[i], a[i]
    else:
        break

print(sum(a))

- a์˜ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ๋ฅผ ์ตœ๋Œ€ k๊ฐœ ๊ณจ๋ผ์„œ b์˜ ๊ฐ€์žฅ ํฐ ์›์†Œ๋“ค๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค.

- ๋”ฐ๋ผ์„œ a๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ, b๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ

- ์ด๋•Œ ์•ž์—์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๊ฐ ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ๋น„๊ตํ•ด์„œ b์˜ ์›์†Œ๊ฐ€ ๋” ํฌ๋ฉด ๋ฐ”๊ฟ”์น˜๊ธฐ ํ•ด์ฃผ๋ฉด ๋จ.