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
์ค๋ช ํ๋ ๊ฑด ์ด๋ ค์..๐ง