[Algorithm] Algospot - STRJOIN

Sungjin Choยท2023๋…„ 7์›” 26์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
1/15
post-thumbnail

STRJOIN (๋‚œ์ด๋„: ์ค‘)

๐Ÿ“š ๋ฌธ์ œ ์„ค๋ช…

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด 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 ๊ฐœ์˜ ๋ฌธ์ž์—ด๋“ค์˜ ๊ธธ์ด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ํ•„์š”ํ•œ ์ตœ์†Œ ๋น„์šฉ์„ ์ฐพ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

์ž…๋ ฅ
์ž…๋ ฅ์˜ ์ฒซ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ˆ˜ c (c <= 50) ๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. 
๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ ์ค„์—๋Š” ๋ฌธ์ž์—ด์˜ ์ˆ˜ n (1 <= n <= 100) ์ด ์ฃผ์–ด์ง€๋ฉฐ,
๋‹ค์Œ ์ค„์—๋Š” n ๊ฐœ์˜ ์ •์ˆ˜๋กœ ๊ฐ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
๊ฐ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” 1,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ถœ๋ ฅ
๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ํ•œ ์ค„์— ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ํ•ฉ์น  ๋•Œ ํ•„์š”ํ•œ ์ตœ์†Œ ๋น„์šฉ์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ
3
3
2 2 4
5
3 1 3 4 1
8
1 1 1 1 1 1 1 2

์˜ˆ์ œ ์ถœ๋ ฅ
12
26
27

๐Ÿค” ์ƒ๊ฐํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ฐ€์žฅ ์ž‘์€ ๋‘ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๋”ํ–ˆ์„ ๋•Œ ์ตœ์†Œ ๋น„์šฉ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ฐ€์žฅ ์ž‘์€ ๋‘ ๊ฐ’์„ ์„œ๋กœ ๋”ํ•˜๊ณ  popํ•ด์„œ ๋ฌธ์ž์—ด์—์„œ ๋นผ๊ณ  ๋”ํ•œ ๊ฐ’์„ ๋‹ค์‹œ
๋„ฃ๊ณ  ์ •๋ ฌํ•œ๋‹ค.

๐Ÿ–ฅ๏ธ ์ฝ”๋“œ

def strjoin(str_length):
    answer = 0
#์ œ์ผ ์ž‘์€๊ฑฐ ๋‘๊ฐœ๋ฅผ ๋”ํ•˜๋ฉด ๋จ
    for i in range(len(str_length)-1):
        str_length.sort()
        tmp = str_length.pop(0) + str_length.pop(0)
        str_length.append(tmp)
        answer += tmp
    return answer

c = int(input())        
for i in range(c):
    n = int(input())
    str_length = list(map(int, input().split()))
    print(strjoin(str_length))

0๊ฐœ์˜ ๋Œ“๊ธ€