프로그래머스 lv2 , 2020 KAKAO BLIND RECRUITMENT
문자열 압축 파이썬
압축할 문자열 s가 매개변수로 주어질 때, 위에 설명한 방법으로 1개 이상 단위로 문자열을 잘라 압축하여 표현한 문자열 중 가장 짧은 것의 길이를 return 하도록 solution 함수를 완성해주세요.
1. dict 을 사용하거나 리스트로 구현해볼까 2. 숫자의 자릿수를 어떻게 뽑아올까 3. 가상의 dict 혹은 list에 저장 후 len() 가져오기
def solution(s):
result = []
for i in range(1, len(s)//2+2):
answer = ''
sam = s[:i]
cnt = 1
for j in range(i, len(s)+i, i):
if sam == s[j:j+i]: # 만약 현재가 전과 같다면
cnt += 1
else:
if cnt == 1:
answer += sam
else:
answer += str(cnt) + sam
sam = s[j:j+i]
cnt = 1
result.append(len(answer))
return min(result)
우선 dict()
로 풀기는 어려웠다.. 접근을 잘못해서, 생각이 많이 꼬였다.
결국 dict()
로 푸는 분들도 없길래 처음부터 리스트로 다시 작성했다...
sam = s[:i]
를 통해 시작 단계를 지정해주고, cnt
를 통해
1씩 늘려줬다.
그 후 숫자는 바로 answer
에 str()
형식으로 바꾸고 넣어 준 후에
계산을 진행해줬다.
사실 문제 자체는 어렵지 않았다. (물론 정답률 30프로 긴함)
해결 방법도 어렵지 않았는데, 너무 복잡하게 돌아가는 경향이 있는듯...
아무래도 runtime이나 내가 좀 더 쓰기 편한 코드를 작성하고 싶은 욕심이 문제..
좀 더 쉽게 접근해도 괜찮다고 무한 for문 해도 괜찮다고 스스로를 다독여주자... 🥲