https://programmers.co.kr/learn/courses/30/lessons/60057
from collections import deque
def solution(s):
min_len = len(s)
for step in range(1, len(s) // 2 + 1):
min_len = min(min_len, get_len(s, step))
return min_len
def get_len(s, step):
before = deque(s)
after = deque()
# i번째 큐
prev = deque()
for _ in range(step):
prev.append(before.popleft())
# i번째 큐, i+1번째 큐 비교
count = 1
while len(before) >= step:
# i+1번째 큐
curr = deque()
for _ in range(step):
curr.append(before.popleft())
# 비교
if prev == curr:
count += 1
else:
after.append(str(count))
for _ in range(step):
after.append(prev.popleft())
prev = curr
count = 1
# 마지막 남은 큐
after.append(str(count))
for _ in range(step):
after.append(prev.popleft())
while before:
after.append(before.popleft())
# 1 제거
compressed = ''.join([s for s in after if s != '1'])
return len(compressed)