๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Programming/์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ…Œ์ŠคํŠธ

[python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค_๋ฌธ์ž์—ด ์••์ถ• (์™„์ „ ํƒ์ƒ‰)

by ๋ญ…์ฆค 2022. 2. 14.
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

ํ’€์ด

์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ž๊ฐ€ 1000 ์ดํ•˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์™„์ „ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธธ์ด๊ฐ€ N์ธ ๋ฌธ์ž์—ด์ด ์ž…๋ ฅ๋˜๋ฉด 1๋ถ€ํ„ฐ N/2 ๊นŒ์ง€์˜ ๋ชจ๋“  ์ˆ˜๋ฅผ ๋‹จ์œ„๋กœ ํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ์••์ถ•ํ•˜๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•˜๊ณ , ๊ฐ€์žฅ ์งง๊ฒŒ ์••์ถ•๋˜๋Š” ๊ธธ์ด๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค. ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ•์€ step ์‚ฌ์ด์ฆˆ๋กœ ๋ฌธ์ž์—ด์„ ์ž˜๋ผ์„œ prev์— ์ €์žฅํ•ด๋‘๊ณ , ๋‹ค์Œ ์œ„์น˜๋ฅผ step ์‚ฌ์ด์ฆˆ๋กœ ์ž๋ฅด๊ณ  prev์™€ ๋˜‘๊ฐ™์€์ง€ ๋น„๊ตํ•˜๋ฉด์„œ ์ง„ํ–‰ํ•œ๋‹ค.

 

def solution(s):
    answer = len(s)
    # step์„ 1๋ถ€ํ„ฐ ๋ฌธ์ž์—ด ๊ธธ์ด ๋ฐ˜๊นŒ์ง€ ๋Š˜๋ ค๊ฐ€๋ฉฐ ํ™•์ธ
    for step in range(1, len(s)//2 +1):
        compressed = ""
        prev = s[0:step]  # ์•ž์—์„œ ๋ถ€ํ„ฐ step ๋งŒํผ์˜ ๋ฌธ์ž์—ด ์ถ”์ถœ
        count = 1
        # step ํฌ๊ธฐ ๋งŒํผ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ์ด์ „ ๋ฌธ์ž์—ด๊ณผ ๋น„๊ต
        for j in range(step, len(s), step):
            if prev == s[j:j+step]:
                count += 1
            # ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์ด ๋‚˜์˜ค๋ฉด
            else :
                if count >= 2:
                    compressed += str(count) + prev 
                else :
                    compressed += prev 
                prev = s[j:j+step]
                count = 1
        # ๋งˆ์ง€๋ง‰ ๋‚จ์€ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ
        if count >= 2:
            compressed += str(count) + prev 
        else :
            compressed += prev
        answer = min(answer, len(compressed))

    return answer
๋ฐ˜์‘ํ˜•