더북(TheBook)

또 다른 문제 풀이

문제를 풀다 보면 이런 생각도 할 수 있을 겁니다. ‘결국 규칙을 모두 비교해야 한다면, 처음부터 문자열에서 가능한 모든 규칙을 뽑아내서 비교하는 건 안 될까?’라고요. 이에 대한 대답은 ‘가능하다’입니다. 볼 필요가 없는 규칙도 가지고 오겠지만, 최대 입력 수는 1,000개이므로 소요 시간에 크게 영향을 미치지 못합니다. 직접 구현해봅시다.

1. 압축 가능한 길이만큼 순회합니다.

확인해야 할 문자열 길이 자체는 변하지 않으므로 여전히 만큼만 순회해야 합니다. 이번에는 압축을 수행하는 compress() 함수를 만들어서 진행해보겠습니다.

if len(s) == 1: return 1
else: return min(compress(s, length) for length in list(range(1, len(s) // 2 + 1)))

이번에는 가능한 모든 규칙을 생성하는 과정으로 진행하기 때문에 전체 문자열이 1글자인 경우를 대비해 예외 케이스를 만들어야 합니다. 문자열이 1글자라면 을 할 경우 아무것도 남지 않아 배열 조회가 불가능하므로 런타임 에러가 발생합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.