๐Ÿค–/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค | Lv2] ๋ฌธ์ž์—ด ์••์ถ• (Python) - 2020 KAKAO BLIND RECRUITMENT

sssbin 2023. 3. 8. 14:19

 

https://school.programmers.co.kr/learn/courses/30/lessons/60057

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๋ฌธ์ž์—ด ๊ธธ์ด์˜ ์ ˆ๋ฐ˜๋ณด๋‹ค ํฐ ์ˆ˜๋กœ ๋ฌธ์ž์—ด์„ ์ž๋ฅด๋ฉด ๋ฌธ์ž์—ด ์••์ถ•์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—

1๋ถ€ํ„ฐ ๋ฌธ์ž์—ด ๊ธธ์ด์˜ ์ ˆ๋ฐ˜๋งŒ ํƒ์ƒ‰ํ•œ๋‹ค. ==> ์••์ถ•ํ•˜๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด

(์ฒ˜์Œ์— len(s)//2+1๋กœ ๋ฒ”์œ„๋ฅผ ์žก์•„์คฌ๋‹ค๊ฐ€ tc5์—์„œ ์‹คํŒจํ–ˆ๋‹ค. ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 1์ผ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ +2๋ฅผ ํ•ด์ค€๋‹ค.)

 

cnt(๊ฐ™์€ ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜), result(์••์ถ•๋œ ๋ฌธ์ž์—ด), temp(๋น„๊ต ๋ฌธ์ž์—ด) ๋ณ€์ˆ˜๋ฅผ ๋’€๋‹ค.

i(์••์ถ•ํ•˜๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด)๋ฒˆ์งธ ๋ฌธ์ž๋ถ€ํ„ฐ ๋ฌธ์ž์—ด์„ ํƒ์ƒ‰ํ•˜๋Š”๋ฐ, ์ธ๋ฑ์Šค๋Š” i์”ฉ ์ฆ๊ฐ€ํ•œ๋‹ค.

temp์™€ ํ˜„์žฌ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•˜์—ฌ ๊ฐ™์œผ๋ฉด cnt๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ ,

๋‹ค๋ฅด๋ฉด ์ €์žฅ๋˜์–ด ์žˆ๋Š” cnt์™€ temp๋ฅผ result ๋ฌธ์ž์—ด์— ๋ถ™์—ฌ์ฃผ๊ณ  ๋‘ ๊ฐ’์„ ํ˜„์žฌ์˜ ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.

 

๋ฌธ์ž์—ด ์••์ถ•ํ•  ๋•Œ ์ธ๋ฑ์Šค์˜ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•ด๋’€๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•œ ํ›„ ๋์— ๋ฌธ์ž์—ด์ด ๋‚จ์•„์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‚จ์€ ๋ฌธ์ž์—ด์„ ๋ชจ๋‘ ๋ถ™์ธ ํ›„ ๋ฌธ์ž์—ด ๊ธธ์ด์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ฐฑ์‹ ํ•œ๋‹ค.

 

# ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 60057: ๋ฌธ์ž์—ด ์••์ถ• (2020 KAKAO BLIND RECRUITMENT)

def solution(s):
    answer = 1000 # s์˜ ์ตœ๋Œ€ ๊ธธ์ด

    # ๋ฌธ์ž์—ด์˜ ๊ธธ์ด์˜ ์ ˆ๋ฐ˜๋งŒ ํƒ์ƒ‰ (๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 1์ผ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ +2)
    for i in range(1, len(s)//2+2):
        cnt = 1
        result = ''
        temp = ''

        # ๋ฌธ์ž์—ด ์••์ถ•
        for j in range(i, len(s)+1, i):
            if s[j-i:j] == temp:
                cnt += 1
            else:
                if cnt < 2:
                    result += temp
                else:
                    result += str(cnt) + temp
                cnt = 1
                temp = s[j-i:j]

        # ๋‚จ์€ ๋ฌธ์ž์—ด ์ „๋ถ€ ๋ถ™์ด๊ธฐ
        if cnt < 2:
            result += temp + s[j:]
        else:
            result += str(cnt) + temp + s[j:]

        # ์ตœ์†Ÿ๊ฐ’ ๊ฐฑ์‹ 
        answer = min(answer, len(result))

    return answer

 

์„ค๋ช…ํ•˜๋Š” ๊ฑด ์–ด๋ ค์›Œ..๐Ÿ’ง