๐Ÿ“š Study/Baekjoon

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv2 | 2020 KAKAO BLIND RECUITMENT | ๋ฌธ์ž์—ด ์••์ถ•

์œฐ๊ฐฑ 2026. 4. 4. 22:08

https://school.programmers.co.kr/learn/courses/30/lessons/60057?gad_source=1&gad_campaignid=22199869887&gbraid=0AAAAAC_c4nDRnLcdW5pfc_L8ay5k5GtDz&gclid=CjwKCAjwvO7CBhAqEiwA9q2YJbn8g3uU5ynefiaRrs65vrzEvwxuWyBu9ikUQDfmOJJ79-3OPMuXsBoCgF0QAvD_BwE

 

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

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก์˜ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 

 

 

 

 


์ตœ์ ํ™”ํ•œ ํ’€์ด

๋ชจ๋“  ์ •๋ณด๋ฅผ ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์—†์ง€ ์•Š์•˜๋Š”๊ฐ€.. ๋ฐ”๋กœ ์ง์ „ ๊ฒƒ๋งŒ ํ™•์ธํ•˜๋ฉด ๋˜์—ˆ๋˜ ๊ฑด๋ฐ ์™œ ..

def compress(s, num):
    cnt = 1
    prev = s[:num]
    compress = ""
    
    # ์ด์ „ ๋ฌธ์ž์— ๋Œ€ํ•ด์„œ๋งŒ ๋”ํ•จ
    for i in range(num, len(s), num):
        curr = s[i:i+num]
        
        if curr == prev:
            cnt += 1
        
        else:
            if cnt > 1: # ๋ฐ”๋กœ ์ง์ „๊นŒ์ง€ prev๊ฐ€ ์ด์–ด์ ธ ์™”์—ˆ์Œ 
                compress += str(cnt) + prev
            else: # ์˜ค์ง ํ•˜๋‚˜๋งŒ ์ด์–ด์ง€๋Š” ์ƒํƒœ
                compress += prev
            prev = curr
            cnt = 1
    
    # ๋งจ ๋งˆ์ง€๋ง‰์—์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ
    if cnt > 1: # ๋ฐ”๋กœ ์ง์ „๊นŒ์ง€ prev๊ฐ€ ์ด์–ด์ ธ ์™”์—ˆ์Œ 
        compress += str(cnt) + prev
    else: # ์˜ค์ง ํ•˜๋‚˜๋งŒ ์ด์–ด์ง€๋Š” ์ƒํƒœ
        compress += prev
    
    return compress
    

def solution(s):
    # ์ฃผ์˜์‚ฌํ•ญ: ์••์ถ•์ด ๋œ๋‹ค๊ณ  ํ•ด์„œ ์••์ถ•ํ•˜๋Š”๊ฒŒ ํ•ญ์ƒ ์งง์•„์ง€๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
    # ์ฃผ์˜์‚ฌํ•ญ: ๋ฌธ์ž์—ด์€ ์ œ์ผ ์•ž๋ถ€ํ„ฐ ์ •ํ•ด์ง„ ๊ธธ์ด๋งŒํผ ์ž˜๋ผ์•ผ ํ•œ๋‹ค.
    
    answer = len(s)
    for i in range(1, len(s)//2+1): # ์ตœ์†Œ 2๊ฐœ๋ฌดํ„ฐ ์ „์ฒด ๊ธธ์ด์˜ ๋ฐ˜๊นŒ์ง€ ์••์ถ• ๊ฐ€๋Šฅ
        answer = min(len(compress(s,i)),answer)

    return answer

 

์ฒซ ์‹œ๋„

๋‹ต์€ ๋งž๊ธด ๋งž์•˜๋Š”๋ฐ ,, dict๋กœ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒŒ ์ตœ์„ ์ด ์•„๋‹ˆ์—ˆ์„ ๊ฒƒ ๊ฐ™๋‹ค

์‹ค์ œ๋กœ abab๊ฐ€ 2๊ฐœ์˜ ๋ญ‰ํ……์ด์—์„œ ๋ณด์ธ๋‹ค๋ฉด ๊ทธ๊ฑธ ์ œ๋Œ€๋กœ ์ €์žฅํ•˜๋Š” ํ˜•์‹์€ ์•„๋‹ˆ์—ˆ๊ธฐ ๋–„๋ฌธ์— ์•ž์—๊ฒƒ๋งŒ ์ €์žฅํ–ˆ์Œ

def compress(s, num):
    compression = {}
    for i in range(0,len(s),num):
        if i + num <= len(s):
            tmp = s[i:i+num]
            if tmp in compression:
                if compression[tmp][0] + num == i:
                    compression[tmp][0] = i
                    compression[tmp][1] += 1
            else:
                compression[tmp] = [i,1]
    
    for key, value in compression.items():
        for i in range(value[1],1,-1):
            s = s.replace(key*i,str(i)+key)
        
    return s
    

def solution(s):
    # ์ฃผ์˜์‚ฌํ•ญ: ์••์ถ•์ด ๋œ๋‹ค๊ณ  ํ•ด์„œ ์••์ถ•ํ•˜๋Š”๊ฒŒ ํ•ญ์ƒ ์งง์•„์ง€๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
    # ์ฃผ์˜์‚ฌํ•ญ: ๋ฌธ์ž์—ด์€ ์ œ์ผ ์•ž๋ถ€ํ„ฐ ์ •ํ•ด์ง„ ๊ธธ์ด๋งŒํผ ์ž˜๋ผ์•ผ ํ•œ๋‹ค.
    
    comp_list = [s] # ์••์ถ• ๊ธธ์ด 1์ผ ๋•Œ
    for i in range(1, len(s)//2+1): # ์ตœ์†Œ 2๊ฐœ๋ฌดํ„ฐ ์ „์ฒด ๊ธธ์ด์˜ ๋ฐ˜๊นŒ์ง€ ์••์ถ• ๊ฐ€๋Šฅ
        comp_list.append(compress(s,i))
    answer = 1000
    
    for c in comp_list:
        if len(c) < answer:
            answer = len(c)

    return answer