[์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด] STRJOIN ๋ฌธ์ž์—ด ํ•ฉ์น˜๊ธฐ / ํ—ˆํ”„๋งŒ ์ฝ”๋“œ

2021. 11. 30. 14:24ใ†Programming/Algorithms

1. ๋ฌธ์ œ

 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด C ์˜ ํฐ ๋ฌธ์ œ์  ์ค‘ ํ•˜๋‚˜๋Š” ์–ธ์–ด ์ฐจ์›์—์„œ ๋ฌธ์ž์—ด ๋ณ€์ˆ˜ํ˜•์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. C ์—์„œ๋Š” ๋ฌธ์ž ๋ฐฐ์—ด๋กœ ๋ฌธ์ž์—ด์„ ํ‘œํ˜„ํ•˜๋˜ \0 (NULL) ๋กœ ๋ฌธ์ž์—ด์˜ ๋์„ ์ง€์ •ํ•˜๋Š”๋ฐ, ์ด๋ž˜์„œ๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

void strcat(char* dest, const char* src) {
 // dest ์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋‹ค
 while(*dest) ++dest;
 // src ๋ฅผ ํ•œ ๊ธ€์ž์”ฉ dest ์— ์˜ฎ๊ฒจ ๋ถ™์ธ๋‹ค
 while(*src) *(dest++) = *(src++);
 // ๋ฌธ์ž์—ด์˜ ๋์„ ์•Œ๋ฆฌ๋Š” \0 ์„ ์ถ”๊ฐ€ํ•œ๋‹ค
 *dest = 0;
}

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

์ด ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด n ๊ฐœ์˜ ๋ฌธ์ž์—ด์„ ์ˆœ์„œ์™€ ์ƒ๊ด€์—†์ด ํ•ฉ์ณ์„œ ํ•œ ๊ฐœ์˜ ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ˆœ์„œ๊ฐ€ ์ƒ๊ด€ ์—†๋‹ค๋Š” ๋ง์€ {al,go,spot} ์„ spotalgo ๋กœ ํ•ฉ์น˜๋“  alspotgo ๋กœ ํ•ฉ์น˜๋“  ์ƒ๊ด€ ์—†๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์ž์—ด์„ ํ•ฉ์น˜๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ ์ „์ฒด ๋น„์šฉ์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋จผ์ € al ๊ณผ go ๋ฅผ ํ•ฉ์น˜๊ณ  (2+2=4), ์ด๊ฒƒ์„ spot ๊ณผ ํ•ฉ์น˜๋ฉด (4+4=8) ์ด 12 ์˜ ๋น„์šฉ์ด ๋“ค์ง€๋งŒ al ๊ณผ spot ์„ ํ•ฉ์น˜๊ณ  (2+4=6) ์ด๊ฒƒ์„ ๋‹ค์‹œ go ์— ํ•ฉ์น˜๋ฉด (6+2=8) ์ด 14 ์˜ ๋น„์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

n ๊ฐœ์˜ ๋ฌธ์ž์—ด๋“ค์˜ ๊ธธ์ด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ํ•„์š”ํ•œ ์ตœ์†Œ ๋น„์šฉ์„ ์ฐพ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

 

 

 

 

 

2. ํ’€์ด

 

// ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š” ์ตœ์†Œ ๋น„์šฉ์„ ๊ตฌํ•œ๋‹ค. 

int concat(const vector<int>& lengths) {
	priority_queue<int, vector<int>, greater<int> > pq;
	for (int i = 0; i < lengths.size(); ++i) {
		pq.push(lengths[i]);
	}	
	int ret = 0;
	while (pq.size() > 1) {
		int min1 = pq.top();
		pq.pop();
		int min2 = pq.top();
		pq.pop();

		pq.push(min1 + min2);
		ret += (min1 + min2);
	}
	return ret;
}

 

 

 

 

 

3. ํ—ˆํ”„๋งŒ ์ฝ”๋“œ (Huffman Code)

 

- ํƒ์š•์  ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋กœ, ๊ฐ€๋ณ€ ๊ธธ์ด ์ธ์ฝ”๋”ฉ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์—ฌ๋Ÿฌ ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์‚ฌ์šฉ๋œ๋‹ค. 

- ํ—ˆํ”„๋งŒ ์ฝ”๋“œ๋ฅผ ํ†ตํ•˜์—ฌ ์›๋ฌธ ๊ธ€์ž๋“ค์˜ ์ถœํ˜„ ๋นˆ๋„๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ์˜ˆ์ƒ ๊ธธ์ด๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋น„ํŠธ ํŒจํ„ด์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰ ํ—ˆํ”„๋งŒ ์ฝ”๋“œ๋Š” ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ๋ฌธ์ž ๊ฐœ์ˆ˜ n์— ๋Œ€ํ•˜์—ฌ, ํ•ด๋‹น ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์ด์ง„ ์ฝ”๋“œ๋กœ ์••์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์ ์˜ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค. 

- ๋นˆ๋„ ์ˆ˜์— ๋”ฐ๋ผ, ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ถœํ˜„ํ•˜๋Š” ๊ธ€์ž๋Š” ์งง์€ ํŒจํ„ด์œผ๋กœ, ๋“œ๋ฌผ๊ฒŒ ์ถœํ˜„ํ•˜๋Š” ๊ธ€์ž๋Š” ๋” ๊ธด ํŒจํ„ด์œผ๋กœ ๋ฐฐ๋‹นํ•œ๋‹ค.

- ์šฐ์„  ์ˆœ์œ„ ํ๋ฅผ ํ†ตํ•˜์—ฌ, ๊ฐ€์žฅ ์ž‘์€ ๋‘ ๋…ธ๋“œ ๋‘˜์„ ๊บผ๋‚ด์–ด ํ•ฉ์ณ๊ฐ€๋ฉด์„œ ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. 

 

 

 

 

 

4. git-hub

 

- https://github.com/SohyeonKim-dev/AlgorithmicProblem/blob/main/GreedyMethod/strJoin.cpp

 

 

 

 

 

5. ์ถœ์ฒ˜

 

- https://algospot.com/judge/problem/read/STRJOIN

- https://withhamit.tistory.com/12