๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜

์•Œ๊ณ ๋ฆฌ์ฆ˜ [Algorithm] - ๊ณ„์ˆ˜ ์ •๋ ฌ Counting Sort (7) (C, Python)

๊ณ„์ˆ˜ ์ •๋ ฌ

  ์ด๋ฒˆ์—๋Š” ๊ณ„์ˆ˜ ์ •๋ ฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ๊ณ„์ˆ˜ ์ •๋ ฌ์ด๋ž€ ๋‹จ์ˆœํ•˜๊ฒŒ 'ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ธ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜'์ด๋‹ค. ํ•˜์ง€๋งŒ ๊ณ„์ˆ˜ ์ •๋ ฌ์€ '๋ฒ”์œ„์กฐ๊ฑด'์ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ํ•œํ•ด์„œ ๊ต‰์žฅํžˆ ๋น ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

 

 ์ง€๊ธˆ๊นŒ์ง€ ์„ ํƒ ์ •๋ ฌ, ๋ฒ„๋ธ” ์ •๋ ฌ, ์‚ฝ์ž… ์ •๋ ฌ, ํ€ต ์ •๋ ฌ, ๋ณ‘ํ•ฉ ์ •๋ ฌ, ํž™ ์ •๋ ฌ์„ ๋ฐฐ์› ๋Š”๋ฐ ์ง€๊ธˆ ๊นŒ์ง€ ๋ฐฐ์šด ์ •๋ ฌ ์ค‘ ๊ฐ€์žฅ ๋น ๋ฅธ ์ •๋ ฌ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฅด๋ผ๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„ O(N*log N)์„ ๊ฐ€์ง€๋Š” ํ€ต ์ •๋ ฌ, ๋ณ‘ํ•ฉ ์ •๋ ฌ, ํž™ ์ •๋ ฌ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ณ ๋ฅผ ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ณด๋‹ค ๋” ๋น ๋ฅด๊ฒŒ ์ •๋ ฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ๋ ๊นŒ?

 

  ๊ณ„์ˆ˜ ์ •๋ ฌ์€ ๋ฒ”์œ„๊ฐ€ ์ฃผ์–ด์ ธ์žˆ๋‹ค๋ฉด ์‹œ๊ฐ„๋ณต์žก๋„ O(N)์˜ ์†๋„๋กœ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐฏ์ˆ˜๋ฅผ ์„ธ๊ณ , ๊ฐฏ์ˆ˜๋งŒํผ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ์ •๋ ฌ์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ต‰์žฅํžˆ ๋น ๋ฅด๋‹ค.


๋‹ค์Œ์˜ 5 ์ดํ•˜ ์ž์—ฐ์ˆ˜ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜์„ธ์š”.

 1, 3, 2, 4, 3, 2, 5, 3, 1, 2, 3, 4, 4, 3, 5, 1, 2, 3, 5, 2, 3, 1, 4, 3, 5, 1, 2, 1, 1, 1


 

#include <stdio.h>

int main(void){
	int tmp, count[6], array[30] = { 1,3,2,4,3,2,5,3,1,2,3,4,4,3,5,1,2,3,5,2,3,1,4,3,5,1,2,1,1,1 };
	for (int i = 1; i <= 5; i++) {
		count[i] = 0;
	}

	for (int i = 0; i < 30; i++) {
		count[array[i]]++;
	}

	for (int i = 1; i <= 5; i++) {
		if (count[i] != 0) {
			for (int j = 0; j < count[i]; j++) {
				printf("%d ", i);
			}
		}
	}
}

์œ„์™€ ๊ฐ™์ด ์†Œ์Šค์ฝ”๋“œ๋„ ๊ต‰์žฅํžˆ ๊ฐ„๊ฒฐํ•˜๋‹ค.

ํŒŒ์ด์ฌ

data = [1,3,2,4,3,2,5,3,1,2,3,4,4,3,5,1,2,3,5,2,3,1,4,3,5,1,2,1,1,1]
count=[0,0,0,0,0,0]
for i in range(len(data)):
  count[data[i]] +=1

print(count)
for i in range(len(count)):
  if count[i] != 0:
    for j in range(count[i]):
      print(i, end=" ")

 


์ด ๊ธ€์€ ๋‚˜๋™๋นˆ๋‹˜์˜ ์‹ค์ „ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ•์ขŒ (Algorithm Programming Tutorial)๋ฅผ ์ฐธ๊ณ ํ•ด ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

https://www.youtube.com/watch?v=qQ5iLNjpxSk&list=PLRx0vPvlEmdDHxCvAQS1_6XV4deOwfVrz 

 

 

728x90