ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90

๊ธฐ์ˆ˜ ์ •๋ ฌ

: ์ฃผ์–ด์ง„ ์ˆ˜ ๋“ค๊ฐ„์˜ ๋น„๊ต๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ๋ฒ„ํ‚ท์„ ์‚ฌ์šฉํ•ด ์ •๋ ฌํ•˜๋Š”  ๋ฐฉ๋ฒ•์œผ๋กœ,

๋‚ฎ์€ ์ž๋ฆฌ(1์˜ ์ž๋ฆฌ)์—์„œ ๋†’์€ ์ž๋ฆฌ(10^n ์ž๋ฆฌ) ์ˆœ์œผ๋กœ ๋ฒ„ํ‚ท์— ๋„ฃ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

 

์‹ค์ œ๋กœ ์ˆซ์ž๋“ค ๊ฐ„์˜ ๋น„๊ต๋ฅผ ํ†ตํ•ด ์ •๋ ฌ์„ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, 0~9๊นŒ์ง€์˜ ๋ฒ„ํ‚ท์ด ์žˆ๊ณ  ์ด ๋ฒ„ํ‚ท์— ์ˆซ์ž๋ฅผ ๋„ฃ์–ด๊ฐ€๋ฉฐ ๋ถ„๋ฅ˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

์‹œ๊ฐ„๋ณต์žก๋„

O(r*n) : r์€ ์ˆซ์ž์˜ ์ž๋ฆฟ์ˆ˜, n์€ ์ •๋ ฌ๋  ์ˆ˜์˜ ๊ฐฏ์ˆ˜

 

ํŠน์ง•

1.  ์‹œ๊ฐ„ ๋ณต์žก๋„์—์„œ ์—„์ฒญ๋‚œ ์ด์ ์„ ๊ฐ–๋Š”๋‹ค. ๋ฌด๋ ค O(N)..

2. ํ•˜์ง€๋งŒ ๊ทธ๋งŒํผ ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋งŽ์ด ํ•„์š”ํ•˜๋‹ค.

 

 

[153, 262, 37, 598, 433, 855]๋ฅผ ๊ธฐ์ˆ˜ ์ •๋ ฌ์„ ์ด์šฉํ•ด ์ •๋ ฌํ•ด๋ณด์ž.

๊ฐ€์žฅ ๋‚ฎ์€ 1๋ฒˆ์งธ ์ž๋ฆฌ๋ถ€ํ„ฐ(1์˜ ์ž๋ฆฌ) ๊ฐ€์žฅ ๋†’์€ 3๋ฒˆ์งธ ์ž๋ฆฌ(100์˜ ์ž๋ฆฌ) ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด 0~9 ๊นŒ์ง€ ๋ฒ„ํ‚ท๋“ค์ด ์ž๋ฆฟ์ˆ˜ ๋ณ„๋กœ ์žˆ๊ณ , ํ•ด๋‹นํ•˜๋Š” ์ž๋ฆฟ์ˆ˜์— ๋งž๊ฒŒ ๋ฒ„ํ‚ท์— ๋‹ด๊ฒŒ๋œ๋‹ค.

                    1์˜ ์ž๋ฆฌ ์ •๋ ฌ                                              10์˜ ์ž๋ฆฌ ์ •๋ ฌ                                                    100์˜ ์ž๋ฆฌ ์ •๋ ฌ

 

๊ฒฐ๊ณผ์ ์œผ๋กœ [37, 153, 262, 433, 598, 855] ๋กœ ์ •๋ ฌ๋˜๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์˜์ƒ์„ ์ฐธ๊ณ ํ•ด์„œ ์ดํ•ดํ•˜๋ฉด ์ด์ œ ์™„๋ฒฝํžˆ ์ดํ•ด๊ฐ€ ๊ฐˆ ๊ฒƒ์ด๋‹ค.

 

 

๊ธฐ์ˆ˜์ •๋ ฌ

์˜์ƒ์„ ์„ค๋ช…ํ•˜์ž๋ฉด,

1์˜ ์ž๋ฆฌ ๋ฒ„ํ‚ท์— ์ˆ˜๋“ค์„ ๋‹ด๊ณ  -> ๋ฒ„ํ‚ท์— ๋‹ด๊ธด ์ˆœ์„œ๋Œ€๋กœ ๊บผ๋‚ด์˜จ๋‹ค. (1์˜ ์ž๋ฆฌ๋กœ ์ •๋ ฌ)

์ด ๊บผ๋‚ด์˜จ ๊ฒƒ์„ ์ด๋ฒˆ์—” 10์˜ ์ž๋ฆฌ ๋ฒ„ํ‚ท์— ์ˆ˜๋“ค์„ ๋‹ด๊ณ  -> ๋ฒ„ํ‚ท์— ๋‹ด๊ธด ์ˆœ์„œ๋Œ€๋กœ ๊บผ๋‚ด์˜จ๋‹ค. (10์˜ ์ž๋ฆฌ๋กœ ์ •๋ ฌ)

์ด ๊บผ๋‚ด์˜จ ๊ฒƒ์„ ๋งˆ์ง€๋ง‰์œผ๋กœ 100์˜ ์ž๋ฆฌ ๋ฒ„ํ‚ท์— ์ˆ˜๋“ค์„ ๋‹ด๊ณ  -> ๋ฒ„ํ‚ท์— ๋‹ด๊ธด ์ˆœ์„œ๋Œ€๋กœ ๊บผ๋‚ด์˜จ๋‹ค. (100์˜ ์ž๋ฆฌ๋กœ ์ •๋ ฌ)

 

๊ธฐ์ˆ˜ ์ •๋ ฌ Python ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

from collections import deque

def radixSort():
    nums = list(map(int, input().split(' ')))
    buckets = [deque() for _ in range(10)]
    
    max_val = max(nums)
    queue = deque(nums)
    digit = 1 # ์ž๋ฆฟ์ˆ˜
    
    while (max_val >= digit): # ๊ฐ€์žฅ ํฐ ์ˆ˜์˜ ์ž๋ฆฟ์ˆ˜์ผ ๋•Œ ๊นŒ์ง€๋งŒ ์‹คํ–‰
        while queue:
            num = queue.popleft()
            buckets[(num // digit) % 10].append(num) # ๊ฐ ์ž๋ฆฌ์˜ ์ˆ˜(0~9)์— ๋”ฐ๋ผ ๋ฒ„ํ‚ท์— num์„ ๋„ฃ๋Š”๋‹ค.
        
        # ํ•ด๋‹น ์ž๋ฆฟ์ˆ˜์—์„œ ๋ฒ„ํ‚ท์— ๋‹ค ๋„ฃ์—ˆ์œผ๋ฉด, ๋ฒ„ํ‚ท์— ๋‹ด๊ฒจ์žˆ๋Š” ์ˆœ์„œ๋Œ€๋กœ ๊บผ๋‚ด์™€ ์ •๋ ฌํ•œ๋‹ค.
        for bucket in buckets:
            while bucket:
                queue.append(bucket.popleft())
        print(digit,"์˜ ์ž๋ฆฟ ์ˆ˜ ์ •๋ ฌ: ", list(queue))
        digit *= 10 # ์ž๋ฆฟ์ˆ˜ ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ
    
    print(list(queue))

 

์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ

728x90
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
ยซ   2024/11   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
๊ธ€ ๋ณด๊ด€ํ•จ
250x250