๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
Problem Solving/ALGORITHM

DAT, Count Sorting

by DevIseo 2022. 2. 10.
# practice 1
a = [4, 9, 1, 4, 4, 2]
b = [1, 3, 4, 2, 5, 6, 7, 8, 9]

for i in range(len(b)):
    c = 0
    for j in range(len(a)):
        if a[j] == b[i]:
            c = 1
            break
    if c == 1:
        print('O',end=' ')
    else:
        print('X',end=' ')

# practice 2 -DAT
a = [4, 9, 1, 4, 4, 2]
b = [1, 3, 4, 2, 5, 6, 7, 8, 9]

bucket = [0]*20 # O,X๋ฅผ ๋‹ด์„ ๋ฐ”๊ตฌ๋‹ˆ

for i in range(len(a)): # a์— ์žˆ๋Š” ์• ๋“ค์„ ๋จผ์ € ๋ฐ”๊ตฌ๋‹ˆ์— ์ฒดํฌ ํ•ด์ฃผ๊ธฐ
    index = a[i] # ์—ฌ๊ธฐ์˜ index๋Š” ๋ฐ”๊ตฌ๋‹ˆ์˜ index ๋ฒˆํ˜ธ
    bucket[index] = 1 # ํ•ด๋‹น index์—๋งŒ 1์„ ๋„ฃ์–ด์คŒ - a๊ฐ€ ์žˆ๋Š”๊ณณ์ด ํ‘œ์‹œ๋จ

for i in range(len(b)): #b์™€ bucket์„ ๋น„๊ต - bucket์•ˆ์— a์˜ ์ˆซ์ž ์œ ๋ฌด ์žˆ์œผ๋‹ˆ๊นŒ!
    if bucket[b[i]] == 1: # b[i]๋Š” b์˜ ๊ฐ’์„ ๋œปํ•˜๋Š”๋ฐ ์ด๊ฒŒ bucket์˜ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๊ฐ€ ๋˜๋ฉฐ, ๋งŒ์•ฝ 1์ด๋ผ๋ฉด b in a
        print('O', end=' ')
    else:
        print('X', end=' ')

# practice 3
# n๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ž…๋ ฅ ๋ฐ›์€ ํ›„
# ์–ด๋–ค ์ˆซ์ž๊ฐ€ ๋ช‡ ๊ฐœ ์ž…๋ ฅ ๋˜๋Š”์ง€ ์ถœ๋ ฅ

n = int(input()) # 10
arr = list(map(int, input().split())) # 1 2 4 1 4 3 5 8 7 3

bucket = [0] * n #๋ฐ”๊ตฌ๋‹ˆ ๋งŒ๋“ค๊ธฐ

for i in range(n): #์šฐ๋ฆฌ๊ฐ€ ๋ฐ˜๋ณต ํ•ด์•ผํ•  ๋ฒ”์œ„
    bucket[arr[i]] += 1 # arr[i]๋Š” ๋ฐ”๊ตฌ๋‹ˆ์˜ ์ธ๋ฑ์Šค. ์šฐ๋ฆฌ๋Š” ๊ฐ ์ˆซ์ž๊ฐ€ ๋ช‡ ๋ฒˆ ๋‚˜์™”๋Š”์ง€ ๊ถ๊ธˆ! ๋”ฐ๋ผ์„œ 1์”ฉ ์ถ”๊ฐ€!

for i in range(len(bucket)): #์ด์ œ ๋ฐ”๊ตฌ๋‹ˆ๋ฅผ ๋Œ๋ฉฐ ๊ฐ ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ์ถœ๋ ฅ
    if bucket[i] > 0: # ์—†๋Š” ์ˆซ์ž๋“ค์€ ๊ตณ์ด ์ถœ๋ ฅ ์•ˆํ•ด๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— if๋ฌธ ์ด์šฉ
        print(i,'๊ฐ€',bucket[i],'๊ฐœ ์žˆ์Œ')


# COUNTING SORT -- ์šฐ๋ฆฌ์˜ ๋ชฉ์  sortํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด ๋‚ด๋Š” ๊ฒƒ!
# 1. bucket๋“ฑ๋ก, 0์ดˆ๊ธฐํ™”
# 2. ๋ˆ„์  ํ•ฉ ๊ตฌํ•˜๊ธฐ
# 3. ๊ฐ’์„ ๋„ฃ๊ธฐ

# practice 1
# n๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ž…๋ ฅ ๋ฐ›์€ ํ›„ (1~100๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค ๊ฐ€์ •)
# counting sort ์ด์šฉํ•ด ์ถœ๋ ฅ ํ•˜๊ธฐ

n = int(input()) # 9
arr = list(map(int,input().split())) # 4 7 9 1 3 5 2 3 4
bucket = [0]*101

#dat๋“ฑ๋ก
for i in range(n):
    bucket[arr[i]] += 1 # arr์˜ ๊ฐ’์€ bucket์˜ index์ด๋ฉฐ, arr ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” bucket index์— 1์„ ์ถ”๊ฐ€ํ•˜๋ฉฐ count

#๋ˆ„์ ํ•ฉ
for i in range(1, len(bucket)): # ์‹œ์ž‘์„ 1๋กœํ•˜์—ฌ ์ˆœํšŒ (์ด๋•Œ bucket์˜ len๊ฐ’์€ 100์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ž…๋ ฅํ•œ n๋ณด๋‹ค ์ž‘์Œ)
    bucket[i] += bucket[i-1]  #1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ์ „๊ฐ’์„ ๋”ํ•˜์—ฌ ๋ˆ„์ 

#๊ฐ’๋„ฃ๊ธฐ
temp = [0]*101 # bucket๊ณผ ๊ฐ™์€ ์ˆ˜์˜ temp list๋ฅผ ๋งŒ๋“ค์–ด์คŒ
for i in range(n): # arr์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ฐฐ์—ดํ•˜๊ธฐ ์œ„ํ•ด for๋ฌธ์„ ๋Œ๋ ค์คŒ
    temp[bucket[arr[i]]] = arr[i] 
    # bucket์˜ index๋Š” ์œ„์™€ ๊ฐ™์ด arr[i]์ด๋ฉฐ, bucket์˜ ๊ฐ’์€ temp์˜ index๊ฐ€ ๋˜๊ณ , ์ด ์ž๋ฆฌ์— arr[i] ๊ฐ’์ด ๋“ค์–ด๊ฐ
    bucket[arr[i]] -=1 
    # arr[i]์ค‘ ๊ฐ™์€ ์ˆซ์ž๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ทธ ๊ฐ™์€ ์ˆซ์ž ์ค‘ ๋’ค์ชฝ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์„ ๊ณ ์ •ํ•ด์ฃผ๋Š”๊ฑด๋ฐ, 
    # ๋”ฐ๋ผ์„œ arr[i]๋ฅผ ๋ฐฐ์น˜ํ•จ์— ๋”ฐ๋ผ ํ•ด๋‹น bucket index์˜ ๊ฐ’์„ 1์”ฉ ์ฐจ๊ฐํ•ด์ค˜์•ผ ํ•จ

#์ถœ๋ ฅํ•˜๊ธฐ
for j in temp:
    if j > 0: #temp๊ฐ€ 0~100๊นŒ์ง€ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ,, ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฐ’ ์ถœ๋ ฅ์„ ์œ„ํ•ด 0์ด์ƒ๋งŒ ์ถœ๋ ฅ!
        print(j, end=' ') # 1 2 3 3 4 4 5 7 9

COUNT SORTING

๋Œ“๊ธ€