๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฌธ์ž์—ด ์••์ถ•

by syLim___ 2023. 3. 2.
728x90

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

 

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

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

programmers.co.kr


ํ’€์ด ์ฐธ๊ณ  --> ์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค (๋‚˜๋™๋นˆ)

 

์ด๊ฑด ๋‚ด๊ฐ€ ํ’€์—ˆ๋‹ค๊ธฐ๋ณด๋‹ค,, ํ’€๋‹ค๊ฐ€ ์‹คํŒจํ•˜๊ณ  ์ฑ…๋ณด๋ฉด์„œ ๊ณต๋ถ€ํ•˜๊ณ , ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•œ ๊ธ€์ด๋‹ค.


์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ 1000 ์ดํ•˜์ด๋ฏ€๋กœ,

์™„์ „ํƒ์ƒ‰์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•ด๋ณด๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค!

 

๋”ฐ๋ผ์„œ ๋ฌธ์ž์—ด์„ 1๊ฐœ, 2๊ฐœ, 3๊ฐœ, 4๊ฐœ, ... , len(s)//2 ๊ฐœ ๊นŒ์ง€ ์ž˜๋ผ์„œ ์••์ถ•๋œ ๋ฌธ์ž์—ด ๊ธธ์ด๋ฅผ ๋น„๊ตํ•ด๋ณด๊ณ ,

์ด ์ค‘ ๊ฐ€์žฅ ์งง์€ ๊ฒƒ์„ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

 

์ธ๋ฑ์Šค ๋˜‘๋ฐ”๋กœ ์„ธ๋ฉด์„œ ๋ฌธ์ž์—ด ์Šฌ๋ผ์ด์‹ฑ ์ž˜ ํ•˜๋ฉด ๋œ๋‹ค.

์ •๋‹ต ์ฝ”๋“œ ๋ณด๊ณ  ์ดํ•ดํ•˜๋Š” ๊ฑด ์ •๋ง ์‰ฝ๋‹ค. ๊ทผ๋ฐ ์ด์ œ ์ด๊ฒŒ ํ˜ผ์ž ์„œ ๊ตฌํ˜„ํ•˜๋ ค๋‹ˆ๊นŒ ์–ด๋ ค์› ๋˜..๋ฌธ์ œ๋‹ค..

์•„์ง์€ ์—ฐ์Šต์ด ํ›จ์”ฌ ๋งŽ์ด ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.


์ด์ฝ”ํ…Œ ์ฑ…์— ๋‚˜์˜จ ์ •๋‹ต ์ฝ”๋“œ

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

 

 

---

๋‚ด ํ’€์ด (2023.03.26)

 

my_str = "aabbaccc"

# ์••์ถ•๋‹จ์œ„: 1๋ถ€ํ„ฐ ๋ฌธ์ž์—ด ๊ธธ์ด์˜ ์ ˆ๋ฐ˜๊นŒ์ง€
token = 1
ans = int(1e9)
while token <= len(my_str)//2:
  temp = ''
  arr = [] #๋ฌธ์ž์—ด์„ ์ž˜๋ผ์„œ ์ €์žฅ
  i = 0
  while i < len(my_str):
    arr.append(my_str[i:i+token])
    i += token
    
  before = ''
  cnt = 1
  for x in arr:
    if x == before: # ์•ž์˜ ๋ฌธ์ž์™€ ๊ฐ™์œผ๋ฉด ์นด์šดํŠธ ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ
      cnt += 1
    else: # ์•„๋‹ˆ๋ผ๋ฉด ๋ฌธ์ž์—ด์— ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ  ์นด์šดํŠธ, ์•ž์˜๋ฌธ์ž ๊ฐ’ ๋ฐ”๊ฟ”์ฃผ๊ธฐ
      if cnt > 1:
         temp += str(cnt) + before
         cnt = 1
      else:
         temp += before
      before = x
  # ๋งˆ์ง€๋ง‰ ๋‚จ์€ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ    
  if cnt>1:
    temp += str(cnt) + before
  else:
    temp += before
  
  token += 1
  ans = min(ans, len(temp))

print(ans)

์ถ”์ถœํ•œ ๋ฌธ์ž์—ด์„ ๋ฐฐ์—ด์— ์ €์žฅํ•ด๋‘๊ณ , ๋ฐฐ์—ด์„ ๋˜๋‹ค์‹œ ์ˆœํšŒํ•  ํ•„์š” ์—†์ด ๋ฐ”๋กœ๋ฐ”๋กœ ํ•ด์ฃผ๋ฉด ๋˜๋Š”๊ตฌ๋‚ญ..!

728x90